Эх сурвалжийг харах

no nullable in butterknife

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 6 жил өмнө
parent
commit
4061028cad

+ 59 - 25
src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -34,6 +34,7 @@ import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.ImageButton;
 import android.widget.ImageView;
+import android.widget.LinearLayout;
 import android.widget.PopupMenu;
 import android.widget.ProgressBar;
 import android.widget.TextView;
@@ -74,53 +75,68 @@ import butterknife.Unbinder;
  */
 public class FileDetailFragment extends FileFragment implements OnClickListener {
     private static final String TAG = FileDetailFragment.class.getSimpleName();
-    public static final String FTAG_CONFIRMATION = "REMOVE_CONFIRMATION_FRAGMENT";
-    public static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT";
+    private static final String FTAG_CONFIRMATION = "REMOVE_CONFIRMATION_FRAGMENT";
+    static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT";
 
     private static final String ARG_FILE = "FILE";
     private static final String ARG_ACCOUNT = "ACCOUNT";
     private static final String ARG_ACTIVE_TAB = "TAB";
 
-    @Nullable @BindView(R.id.progressBlock)
+    @BindView(R.id.detail_container)
+    LinearLayout detailContainer;
+
+    @BindView(R.id.progressBlock)
     View downloadProgressContainer;
 
-    @Nullable @BindView(R.id.cancelBtn)
+    @BindView(R.id.cancelBtn)
     ImageButton cancelButton;
 
-    @Nullable @BindView(R.id.progressBar)
+    @BindView(R.id.progressBar)
     ProgressBar progressBar;
 
-    @Nullable @BindView(R.id.progressText)
+    @BindView(R.id.progressText)
     TextView progressText;
 
-    @Nullable @BindView(R.id.filename)
+    @BindView(R.id.filename)
     TextView fileName;
 
-    @Nullable @BindView(R.id.size)
+    @BindView(R.id.size)
     TextView fileSize;
 
-    @Nullable @BindView(R.id.modified)
+    @BindView(R.id.modified)
     TextView fileModifiedTimestamp;
 
-    @Nullable @BindView(R.id.favorite)
+    @BindView(R.id.favorite)
     ImageView favoriteIcon;
 
-    @Nullable @BindView(R.id.overflow_menu)
+    @BindView(R.id.overflow_menu)
     ImageView overflowMenu;
 
-    @Nullable @BindView(R.id.tab_layout)
+    @BindView(R.id.tab_layout)
     TabLayout tabLayout;
 
-    @Nullable @BindView(R.id.pager)
+    @BindView(R.id.pager)
     ViewPager viewPager;
 
+    @BindView(R.id.empty_list_view)
+    public LinearLayout emptyContentContainer;
+
+    @BindView(R.id.empty_list_view_headline)
+    public TextView emptyContentHeadline;
+
+    @BindView(R.id.empty_list_icon)
+    public ImageView emptyContentIcon;
+
+    @BindView(R.id.empty_list_progress)
+    public ProgressBar emptyContentProgressBar;
+
     private int layout;
     private View view;
     private boolean previewLoaded;
     private Account account;
     private Unbinder unbinder;
 
-    public ProgressListener progressListener;
+    private ProgressListener progressListener;
     private ToolbarActivity activity;
     private int activeTab;
 
@@ -166,12 +182,12 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
      * Creates an empty details fragment.
      *
      * It's necessary to keep a public constructor without parameters; the system uses it when tries
-     * to reinstantiate a fragment automatically.
+     * to reinstate a fragment automatically.
      */
     public FileDetailFragment() {
         super();
         account = null;
-        layout = R.layout.empty_list;
+        layout = R.layout.file_details_fragment;
         progressListener = null;
     }
 
@@ -223,22 +239,28 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
     @Override
     public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 
-        setFile(getArguments().getParcelable(ARG_FILE));
-        account = getArguments().getParcelable(ARG_ACCOUNT);
-        activeTab = getArguments().getInt(ARG_ACTIVE_TAB, 0);
+        Bundle arguments = getArguments();
+
+        if (arguments == null) {
+            throw new IllegalArgumentException("Arguments may not be null");
+        }
+
+        setFile(arguments.getParcelable(ARG_FILE));
+        account = arguments.getParcelable(ARG_ACCOUNT);
+        activeTab = arguments.getInt(ARG_ACTIVE_TAB, 0);
 
         if (savedInstanceState != null) {
             setFile(savedInstanceState.getParcelable(FileActivity.EXTRA_FILE));
             account = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT);
         }
 
-        if (getFile() != null && account != null) {
-            layout = R.layout.file_details_fragment;
-        }
-
         view = inflater.inflate(layout, null);
         unbinder = ButterKnife.bind(this, view);
 
+        if (getFile() == null || account == null) {
+            showEmptyContent();
+        }
+
         return view;
     }
 
@@ -256,7 +278,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
         }
     }
 
-    public void onOverflowIconClicked(View view) {
+    private void onOverflowIconClicked(View view) {
         PopupMenu popup = new PopupMenu(getActivity(), view);
         popup.inflate(R.menu.file_details_actions_menu);
         prepareOptionsMenu(popup.getMenu());
@@ -685,7 +707,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
         }
     }
 
-    public void leaveTransferProgress() {
+    private void leaveTransferProgress() {
         if (progressListener != null) {
             if (mContainerActivity.getFileDownloaderBinder() != null) {
                 mContainerActivity.getFileDownloaderBinder().
@@ -698,6 +720,18 @@ public class FileDetailFragment extends FileFragment implements OnClickListener
         }
     }
 
+    private void showEmptyContent() {
+        if (emptyContentContainer != null) {
+            detailContainer.setVisibility(View.GONE);
+
+            emptyContentHeadline.setText(R.string.file_details_no_content);
+
+            emptyContentProgressBar.setVisibility(View.GONE);
+            emptyContentIcon.setImageResource(R.drawable.ic_list_empty_error);
+            emptyContentIcon.setVisibility(View.VISIBLE);
+        }
+    }
+
     /**
      * Helper class responsible for updating the progress bar shown for file downloading.
      */

+ 141 - 134
src/main/res/layout/file_details_fragment.xml

@@ -27,174 +27,181 @@
 
     <LinearLayout
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
+        android:layout_height="match_parent"
         android:orientation="vertical">
 
         <LinearLayout
+            android:id="@+id/detail_container"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:paddingTop="@dimen/standard_padding"
-            android:paddingLeft="@dimen/standard_padding"
-            android:paddingRight="@dimen/standard_padding"
-            android:paddingBottom="@dimen/standard_padding"
-            android:orientation="horizontal">
+            android:orientation="vertical">
 
             <LinearLayout
-                android:layout_width="0dp"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:orientation="vertical">
-
-                <TextView
-                    android:id="@+id/filename"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:ellipsize="middle"
-                    android:text="@string/placeholder_filename"
-                    android:textColor="@color/black"
-                    android:textStyle="bold"
-                    android:textSize="20sp" />
+                android:orientation="horizontal"
+                android:paddingLeft="@dimen/standard_padding"
+                android:paddingTop="@dimen/standard_padding"
+                android:paddingRight="@dimen/standard_padding"
+                android:paddingBottom="@dimen/standard_padding">
 
                 <LinearLayout
-                    android:id="@+id/filedetails"
-                    android:layout_width="wrap_content"
+                    android:layout_width="0dp"
                     android:layout_height="wrap_content"
-                    android:gravity="center"
-                    android:orientation="horizontal">
-
-                    <ImageView
-                        android:id="@+id/favorite"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginEnd="@dimen/standard_eighth_margin"
-                        android:layout_marginLeft="@dimen/zero"
-                        android:layout_marginRight="@dimen/standard_eighth_margin"
-                        android:layout_marginStart="@dimen/zero"
-                        android:contentDescription="@null"
-                        android:src="@drawable/ic_star_outline" />
-
-                    <TextView
-                        android:id="@+id/size"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:text="@string/placeholder_fileSize"
-                        android:textSize="16sp" />
+                    android:layout_weight="1"
+                    android:orientation="vertical">
 
                     <TextView
-                        android:id="@+id/file_separator"
+                        android:id="@+id/filename"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:gravity="end"
-                        android:paddingEnd="@dimen/standard_quarter_padding"
-                        android:paddingLeft="@dimen/zero"
-                        android:paddingRight="@dimen/standard_quarter_padding"
-                        android:paddingStart="@dimen/zero"
-                        android:text="@string/info_separator"
-                        android:textColor="@color/list_item_lastmod_and_filesize_text"
-                        android:textSize="@dimen/two_line_secondary_text_size" />
-
-                    <TextView
-                        android:id="@+id/modified"
+                        android:ellipsize="middle"
+                        android:text="@string/placeholder_filename"
+                        android:textColor="@color/black"
+                        android:textSize="20sp"
+                        android:textStyle="bold" />
+
+                    <LinearLayout
+                        android:id="@+id/filedetails"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:gravity="end"
-                        android:text="@string/placeholder_media_time"
-                        android:textSize="16sp" />
-
-                    <ImageView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginEnd="@dimen/standard_eighth_margin"
-                        android:layout_marginLeft="@dimen/standard_margin"
-                        android:layout_marginRight="@dimen/standard_eighth_margin"
-                        android:layout_marginStart="@dimen/standard_margin"
-                        android:contentDescription="@null"
-                        android:src="@drawable/ic_tag"
-                        android:visibility="gone" />
-
-                    <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:text="@string/tags"
-                        android:visibility="gone" />
+                        android:gravity="center"
+                        android:orientation="horizontal">
+
+                        <ImageView
+                            android:id="@+id/favorite"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="@dimen/zero"
+                            android:layout_marginLeft="@dimen/zero"
+                            android:layout_marginEnd="@dimen/standard_eighth_margin"
+                            android:layout_marginRight="@dimen/standard_eighth_margin"
+                            android:contentDescription="@null"
+                            android:src="@drawable/ic_star_outline" />
+
+                        <TextView
+                            android:id="@+id/size"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="@string/placeholder_fileSize"
+                            android:textSize="16sp" />
+
+                        <TextView
+                            android:id="@+id/file_separator"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="end"
+                            android:paddingStart="@dimen/zero"
+                            android:paddingLeft="@dimen/zero"
+                            android:paddingEnd="@dimen/standard_quarter_padding"
+                            android:paddingRight="@dimen/standard_quarter_padding"
+                            android:text="@string/info_separator"
+                            android:textColor="@color/list_item_lastmod_and_filesize_text"
+                            android:textSize="@dimen/two_line_secondary_text_size" />
+
+                        <TextView
+                            android:id="@+id/modified"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="end"
+                            android:text="@string/placeholder_media_time"
+                            android:textSize="16sp" />
+
+                        <ImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="@dimen/standard_margin"
+                            android:layout_marginLeft="@dimen/standard_margin"
+                            android:layout_marginEnd="@dimen/standard_eighth_margin"
+                            android:layout_marginRight="@dimen/standard_eighth_margin"
+                            android:contentDescription="@null"
+                            android:src="@drawable/ic_tag"
+                            android:visibility="gone" />
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="@string/tags"
+                            android:visibility="gone" />
+
+                    </LinearLayout>
 
                 </LinearLayout>
 
+                <ImageView
+                    android:id="@+id/overflow_menu"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@color/white"
+                    android:contentDescription="@string/overflow_menu"
+                    android:src="@drawable/ic_dots_vertical" />
             </LinearLayout>
 
-            <ImageView
-                android:id="@+id/overflow_menu"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@color/white"
-                android:src="@drawable/ic_dots_vertical"
-                android:contentDescription="@string/overflow_menu"/>
-        </LinearLayout>
-
-        <LinearLayout
-            android:id="@+id/progressBlock"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingLeft="@dimen/standard_padding"
-            android:paddingRight="@dimen/standard_padding"
-            android:paddingBottom="@dimen/standard_half_padding"
-            android:orientation="vertical">
-
-            <TextView
-                android:id="@+id/progressText"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/downloader_download_in_progress_ticker" />
-
             <LinearLayout
+                android:id="@+id/progressBlock"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/standard_quarter_margin"
-                android:gravity="center"
-                android:orientation="horizontal">
+                android:orientation="vertical"
+                android:paddingLeft="@dimen/standard_padding"
+                android:paddingRight="@dimen/standard_padding"
+                android:paddingBottom="@dimen/standard_half_padding">
 
-                <ProgressBar
-                    android:id="@+id/progressBar"
-                    style="?android:attr/progressBarStyleHorizontal"
-                    android:layout_width="0dp"
+                <TextView
+                    android:id="@+id/progressText"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_weight="1"
-                    android:indeterminate="false"
-                    android:indeterminateOnly="false" />
+                    android:text="@string/downloader_download_in_progress_ticker" />
 
-                <ImageButton
-                    android:id="@+id/cancelBtn"
-                    android:layout_width="wrap_content"
+                <LinearLayout
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="@dimen/standard_half_margin"
-                    android:layout_marginStart="@dimen/standard_half_margin"
-                    android:background="@android:color/transparent"
-                    android:contentDescription="@string/common_cancel"
-                    android:src="@drawable/ic_cancel" />
+                    android:layout_marginBottom="@dimen/standard_quarter_margin"
+                    android:gravity="center"
+                    android:orientation="horizontal">
 
-            </LinearLayout>
+                    <ProgressBar
+                        android:id="@+id/progressBar"
+                        style="?android:attr/progressBarStyleHorizontal"
+                        android:layout_width="0dp"
+                        android:layout_height="wrap_content"
+                        android:layout_weight="1"
+                        android:indeterminate="false"
+                        android:indeterminateOnly="false" />
 
-        </LinearLayout>
+                    <ImageButton
+                        android:id="@+id/cancelBtn"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginStart="@dimen/standard_half_margin"
+                        android:layout_marginLeft="@dimen/standard_half_margin"
+                        android:background="@android:color/transparent"
+                        android:contentDescription="@string/common_cancel"
+                        android:src="@drawable/ic_cancel" />
 
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:background="@color/list_divider_background" />
+                </LinearLayout>
 
-        <com.google.android.material.tabs.TabLayout
-            android:id="@+id/tab_layout"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            app:tabGravity="center"
-            app:tabMode="fixed"
-            app:tabTextAppearance="@style/AppTabTextAppearance"
-            android:background="@color/white" />
+            </LinearLayout>
 
-        <androidx.viewpager.widget.ViewPager
-            android:id="@+id/pager"
-            android:layout_width="match_parent"
-            android:layout_height="fill_parent"/>
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/list_divider_background" />
 
-    </LinearLayout>
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/tab_layout"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@color/white"
+                app:tabGravity="center"
+                app:tabMode="fixed"
+                app:tabTextAppearance="@style/AppTabTextAppearance" />
 
+            <androidx.viewpager.widget.ViewPager
+                android:id="@+id/pager"
+                android:layout_width="match_parent"
+                android:layout_height="fill_parent" />
+        </LinearLayout>
+
+        <include layout="@layout/empty_list" />
+    </LinearLayout>
 </ScrollView>

+ 1 - 0
src/main/res/values/strings.xml

@@ -840,4 +840,5 @@
     <string name="battery_optimization_disable">disable</string>
     <string name="battery_optimization_close">Close</string>
     <string name="battery_optimization_no_setting">Unable to start battery settings directly. Please adjust manually in settings.</string>
+    <string name="file_details_no_content">Failed to load details</string>
 </resources>