blob: 66792da116a4c94225ec5d73ac19e814c82d3cd8 [file] [log] [blame]
Steve McKaye934ce62015-03-25 14:35:33 -07001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.documentsui;
18
19import java.util.HashMap;
20import java.util.List;
21
22import android.app.Activity;
23import android.app.Fragment;
24import android.content.pm.ResolveInfo;
25import android.os.Parcel;
26import android.os.Parcelable;
27import android.util.SparseArray;
28
29import com.android.documentsui.model.DocumentInfo;
30import com.android.documentsui.model.DocumentStack;
31import com.android.documentsui.model.DurableUtils;
32import com.android.documentsui.model.RootInfo;
33import com.google.common.collect.Maps;
34
35abstract class BaseActivity extends Activity {
Steve McKaye934ce62015-03-25 14:35:33 -070036 public abstract State getDisplayState();
37 public abstract RootInfo getCurrentRoot();
38 public abstract void onStateChanged();
39 public abstract void setRootsDrawerOpen(boolean open);
40 public abstract void onDocumentPicked(DocumentInfo doc);
41 public abstract void onDocumentsPicked(List<DocumentInfo> docs);
42 public abstract DocumentInfo getCurrentDirectory();
43 public abstract void setPending(boolean pending);
44 public abstract void onStackPicked(DocumentStack stack);
45 public abstract void onPickRequested(DocumentInfo pickTarget);
46 public abstract void onAppPicked(ResolveInfo info);
47 public abstract void onRootPicked(RootInfo root, boolean closeDrawer);
48 public abstract void onSaveRequested(DocumentInfo replaceTarget);
49 public abstract void onSaveRequested(String mimeType, String displayName);
50
51 public static BaseActivity get(Fragment fragment) {
52 return (BaseActivity) fragment.getActivity();
53 }
54
Daichi Hirono1a2fdb42015-04-15 13:41:18 +090055 public static abstract class DocumentsIntent {
56 /** Intent action name to open copy destination. */
57 public static String ACTION_OPEN_COPY_DESTINATION =
58 "com.android.documentsui.OPEN_COPY_DESTINATION";
59
60 /**
61 * Extra boolean flag for ACTION_OPEN_COPY_DESTINATION_STRING, which
62 * specifies if the destination directory needs to create new directory or not.
63 */
64 public static String EXTRA_DIRECTORY_COPY = "com.android.documentsui.DIRECTORY_COPY";
65 }
66
Steve McKaye934ce62015-03-25 14:35:33 -070067 public static class State implements android.os.Parcelable {
68 public int action;
69 public String[] acceptMimes;
70
71 /** Explicit user choice */
72 public int userMode = MODE_UNKNOWN;
73 /** Derived after loader */
74 public int derivedMode = MODE_LIST;
75
76 /** Explicit user choice */
77 public int userSortOrder = SORT_ORDER_UNKNOWN;
78 /** Derived after loader */
79 public int derivedSortOrder = SORT_ORDER_DISPLAY_NAME;
80
81 public boolean allowMultiple = false;
82 public boolean showSize = false;
83 public boolean localOnly = false;
84 public boolean forceAdvanced = false;
85 public boolean showAdvanced = false;
86 public boolean stackTouched = false;
87 public boolean restored = false;
Daichi Hirono9be34292015-04-14 17:12:54 +090088 public boolean directoryCopy = false;
Steve McKaye934ce62015-03-25 14:35:33 -070089
90 /** Current user navigation stack; empty implies recents. */
91 public DocumentStack stack = new DocumentStack();
92 /** Currently active search, overriding any stack. */
93 public String currentSearch;
94
95 /** Instance state for every shown directory */
96 public HashMap<String, SparseArray<Parcelable>> dirState = Maps.newHashMap();
97
98 public static final int ACTION_OPEN = 1;
99 public static final int ACTION_CREATE = 2;
100 public static final int ACTION_GET_CONTENT = 3;
101 public static final int ACTION_OPEN_TREE = 4;
102 public static final int ACTION_MANAGE = 5;
Jeff Sharkey59d577a2015-04-11 21:27:21 -0700103 public static final int ACTION_BROWSE = 6;
104 public static final int ACTION_BROWSE_ALL = 7;
Daichi Hironobbe22922015-04-10 15:50:38 +0900105 public static final int ACTION_OPEN_COPY_DESTINATION = 8;
Steve McKaye934ce62015-03-25 14:35:33 -0700106
107 public static final int MODE_UNKNOWN = 0;
108 public static final int MODE_LIST = 1;
109 public static final int MODE_GRID = 2;
110
111 public static final int SORT_ORDER_UNKNOWN = 0;
112 public static final int SORT_ORDER_DISPLAY_NAME = 1;
113 public static final int SORT_ORDER_LAST_MODIFIED = 2;
114 public static final int SORT_ORDER_SIZE = 3;
115
116 @Override
117 public int describeContents() {
118 return 0;
119 }
120
121 @Override
122 public void writeToParcel(Parcel out, int flags) {
123 out.writeInt(action);
124 out.writeInt(userMode);
125 out.writeStringArray(acceptMimes);
126 out.writeInt(userSortOrder);
127 out.writeInt(allowMultiple ? 1 : 0);
128 out.writeInt(showSize ? 1 : 0);
129 out.writeInt(localOnly ? 1 : 0);
130 out.writeInt(forceAdvanced ? 1 : 0);
131 out.writeInt(showAdvanced ? 1 : 0);
132 out.writeInt(stackTouched ? 1 : 0);
133 out.writeInt(restored ? 1 : 0);
134 DurableUtils.writeToParcel(out, stack);
135 out.writeString(currentSearch);
136 out.writeMap(dirState);
137 }
138
139 public static final Creator<State> CREATOR = new Creator<State>() {
140 @Override
141 public State createFromParcel(Parcel in) {
142 final State state = new State();
143 state.action = in.readInt();
144 state.userMode = in.readInt();
145 state.acceptMimes = in.readStringArray();
146 state.userSortOrder = in.readInt();
147 state.allowMultiple = in.readInt() != 0;
148 state.showSize = in.readInt() != 0;
149 state.localOnly = in.readInt() != 0;
150 state.forceAdvanced = in.readInt() != 0;
151 state.showAdvanced = in.readInt() != 0;
152 state.stackTouched = in.readInt() != 0;
153 state.restored = in.readInt() != 0;
154 DurableUtils.readFromParcel(in, state.stack);
155 state.currentSearch = in.readString();
156 in.readMap(state.dirState, null);
157 return state;
158 }
159
160 @Override
161 public State[] newArray(int size) {
162 return new State[size];
163 }
164 };
165 }
166}