| /* |
| * Copyright (C) 2015 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 java.util.HashMap; |
| import java.util.List; |
| |
| import android.app.Activity; |
| import android.app.Fragment; |
| import android.content.pm.ResolveInfo; |
| 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 com.google.common.collect.Maps; |
| |
| abstract class BaseActivity extends Activity { |
| /** Intent action name to open copy destination. */ |
| public static String ACTION_OPEN_COPY_DESTINATION_STRING = |
| "com.android.documentsui.OPEN_COPY_DESTINATION"; |
| |
| /** |
| * Extra boolean flag for ACTION_OPEN_COPY_DESTINATION_STRING, which |
| * specifies if the destination directory needs to create new directory or not. |
| */ |
| public static String EXTRA_DIRECTORY_COPY = "com.android.documentsui.DIRECTORY_COPY"; |
| |
| public abstract State getDisplayState(); |
| public abstract RootInfo getCurrentRoot(); |
| public abstract void onStateChanged(); |
| public abstract void setRootsDrawerOpen(boolean open); |
| public abstract void onDocumentPicked(DocumentInfo doc); |
| public abstract void onDocumentsPicked(List<DocumentInfo> docs); |
| public abstract DocumentInfo getCurrentDirectory(); |
| public abstract void setPending(boolean pending); |
| public abstract void onStackPicked(DocumentStack stack); |
| public abstract void onPickRequested(DocumentInfo pickTarget); |
| public abstract void onAppPicked(ResolveInfo info); |
| public abstract void onRootPicked(RootInfo root, boolean closeDrawer); |
| public abstract void onSaveRequested(DocumentInfo replaceTarget); |
| public abstract void onSaveRequested(String mimeType, String displayName); |
| |
| public static BaseActivity get(Fragment fragment) { |
| return (BaseActivity) fragment.getActivity(); |
| } |
| |
| public static 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_LIST; |
| |
| /** Explicit user choice */ |
| public int userSortOrder = SORT_ORDER_UNKNOWN; |
| /** Derived after loader */ |
| public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME; |
| |
| public boolean allowMultiple = false; |
| public boolean showSize = false; |
| public boolean localOnly = false; |
| public boolean forceAdvanced = false; |
| public boolean showAdvanced = false; |
| public boolean stackTouched = false; |
| public boolean restored = false; |
| public boolean directoryCopy = false; |
| |
| /** 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<String, SparseArray<Parcelable>> dirState = Maps.newHashMap(); |
| |
| 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_BROWSE_ALL = 7; |
| public static final int ACTION_OPEN_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; |
| |
| @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(showSize ? 1 : 0); |
| out.writeInt(localOnly ? 1 : 0); |
| out.writeInt(forceAdvanced ? 1 : 0); |
| out.writeInt(showAdvanced ? 1 : 0); |
| out.writeInt(stackTouched ? 1 : 0); |
| out.writeInt(restored ? 1 : 0); |
| DurableUtils.writeToParcel(out, stack); |
| out.writeString(currentSearch); |
| out.writeMap(dirState); |
| } |
| |
| public static final Creator<State> CREATOR = new Creator<State>() { |
| @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.showSize = in.readInt() != 0; |
| state.localOnly = in.readInt() != 0; |
| state.forceAdvanced = in.readInt() != 0; |
| state.showAdvanced = in.readInt() != 0; |
| state.stackTouched = in.readInt() != 0; |
| state.restored = in.readInt() != 0; |
| DurableUtils.readFromParcel(in, state.stack); |
| state.currentSearch = in.readString(); |
| in.readMap(state.dirState, null); |
| return state; |
| } |
| |
| @Override |
| public State[] newArray(int size) { |
| return new State[size]; |
| } |
| }; |
| } |
| } |