/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.documentsui; import android.content.Intent; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseArray; import com.android.documentsui.model.DocumentInfo; import com.android.documentsui.model.DocumentStack; import com.android.documentsui.model.DurableUtils; import com.android.documentsui.model.RootInfo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class State implements android.os.Parcelable { public int action; public String[] acceptMimes; /** Explicit user choice */ public int userMode = MODE_UNKNOWN; /** Derived after loader */ public int derivedMode = MODE_GRID; /** Explicit user choice */ public int userSortOrder = SORT_ORDER_UNKNOWN; /** Derived after loader */ public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME; public boolean allowMultiple; public boolean forceSize; public boolean showSize; public boolean localOnly; public boolean forceAdvanced; public boolean showAdvanced; public boolean restored; public boolean directoryCopy; public boolean openableOnly; /** Transfer mode for file copy/move operations. */ public int transferMode; /** Current user navigation stack; empty implies recents. */ public DocumentStack stack = new DocumentStack(); /** Currently active search, overriding any stack. */ public String currentSearch; /** Instance state for every shown directory */ public HashMap> dirState = new HashMap<>(); /** Currently copying file */ public List selectedDocumentsForCopy = new ArrayList(); /** Name of the package that started DocsUI */ public List excludedAuthorities = new ArrayList<>(); public static final int ACTION_OPEN = 1; public static final int ACTION_CREATE = 2; public static final int ACTION_GET_CONTENT = 3; public static final int ACTION_OPEN_TREE = 4; public static final int ACTION_MANAGE = 5; public static final int ACTION_BROWSE = 6; public static final int ACTION_PICK_COPY_DESTINATION = 8; public static final int MODE_UNKNOWN = 0; public static final int MODE_LIST = 1; public static final int MODE_GRID = 2; public static final int SORT_ORDER_UNKNOWN = 0; public static final int SORT_ORDER_DISPLAY_NAME = 1; public static final int SORT_ORDER_LAST_MODIFIED = 2; public static final int SORT_ORDER_SIZE = 3; private boolean mStackTouched; public void initAcceptMimes(Intent intent) { if (intent.hasExtra(Intent.EXTRA_MIME_TYPES)) { acceptMimes = intent.getStringArrayExtra(Intent.EXTRA_MIME_TYPES); } else { String glob = intent.getType(); acceptMimes = new String[] { glob != null ? glob : "*/*" }; } } public void onRootChanged(RootInfo root) { stack.root = root; stack.clear(); mStackTouched = true; } public void pushDocument(DocumentInfo info) { stack.push(info); mStackTouched = true; } public void popDocument() { stack.pop(); mStackTouched = true; } public void setStack(DocumentStack stack) { this.stack = stack; mStackTouched = true; } public boolean hasLocationChanged() { return mStackTouched; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(action); out.writeInt(userMode); out.writeStringArray(acceptMimes); out.writeInt(userSortOrder); out.writeInt(allowMultiple ? 1 : 0); out.writeInt(forceSize ? 1 : 0); out.writeInt(showSize ? 1 : 0); out.writeInt(localOnly ? 1 : 0); out.writeInt(forceAdvanced ? 1 : 0); out.writeInt(showAdvanced ? 1 : 0); out.writeInt(restored ? 1 : 0); DurableUtils.writeToParcel(out, stack); out.writeString(currentSearch); out.writeMap(dirState); out.writeList(selectedDocumentsForCopy); out.writeList(excludedAuthorities); out.writeInt(openableOnly ? 1 : 0); out.writeInt(mStackTouched ? 1 : 0); } public static final Creator CREATOR = new Creator() { @Override public State createFromParcel(Parcel in) { final State state = new State(); state.action = in.readInt(); state.userMode = in.readInt(); state.acceptMimes = in.readStringArray(); state.userSortOrder = in.readInt(); state.allowMultiple = in.readInt() != 0; state.forceSize = in.readInt() != 0; state.showSize = in.readInt() != 0; state.localOnly = in.readInt() != 0; state.forceAdvanced = in.readInt() != 0; state.showAdvanced = in.readInt() != 0; state.restored = in.readInt() != 0; DurableUtils.readFromParcel(in, state.stack); state.currentSearch = in.readString(); in.readMap(state.dirState, null); in.readList(state.selectedDocumentsForCopy, null); in.readList(state.excludedAuthorities, null); state.openableOnly = in.readInt() != 0; state.mStackTouched = in.readInt() != 0; return state; } @Override public State[] newArray(int size) { return new State[size]; } }; }