/* * 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 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> 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 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.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]; } }; } }