Prechádzať zdrojové kódy

Use view bindings: https://developer.android.com/topic/libraries/view-binding

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 5 rokov pred
rodič
commit
593b684d4d

+ 4 - 0
build.gradle

@@ -274,6 +274,10 @@ android {
     dataBinding {
         enabled true
     }
+
+    viewBinding {
+        enabled true
+    }
 }
 
 dependencies {

+ 19 - 48
src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java

@@ -36,8 +36,6 @@ import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.ImageView;
-import android.widget.TextView;
 
 import com.evernote.android.job.Job;
 import com.evernote.android.job.JobManager;
@@ -50,6 +48,7 @@ import com.nextcloud.client.device.PowerManagementService;
 import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.java.util.Optional;
 import com.owncloud.android.R;
+import com.owncloud.android.databinding.UploadListLayoutBinding;
 import com.owncloud.android.datamodel.UploadsStorageManager;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
@@ -58,7 +57,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.CheckCurrentCredentialsOperation;
-import com.owncloud.android.ui.EmptyRecyclerView;
 import com.owncloud.android.ui.adapter.UploadListAdapter;
 import com.owncloud.android.ui.decoration.MediaGridItemDecoration;
 import com.owncloud.android.utils.FilesSyncHelper;
@@ -70,10 +68,6 @@ import javax.inject.Inject;
 
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
-import butterknife.BindString;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.Unbinder;
 
 /**
  * Activity listing pending, active, and completed uploads. User can delete
@@ -90,26 +84,6 @@ public class UploadListActivity extends FileActivity {
 
     public SwipeRefreshLayout swipeListRefreshLayout;
 
-    @BindView(R.id.empty_list_view_text)
-    public TextView emptyContentMessage;
-
-    @BindView(R.id.empty_list_view_headline)
-    public TextView emptyContentHeadline;
-
-    @BindView(R.id.empty_list_icon)
-    public ImageView emptyContentIcon;
-
-    @BindView(android.R.id.list)
-    public EmptyRecyclerView recyclerView;
-
-    @BindString(R.string.upload_list_empty_headline)
-    public String noResultsHeadline;
-
-    @BindString(R.string.upload_list_empty_text_auto_upload)
-    public String noResultsMessage;
-
-    private Unbinder unbinder;
-
     @Inject
     UserAccountManager userAccountManager;
 
@@ -125,6 +99,8 @@ public class UploadListActivity extends FileActivity {
     @Inject
     Clock clock;
 
+    private UploadListLayoutBinding binding;
+
     @Override
     public void showFiles(boolean onDeviceOnly) {
         super.showFiles(onDeviceOnly);
@@ -137,10 +113,10 @@ public class UploadListActivity extends FileActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        setContentView(R.layout.upload_list_layout);
-        unbinder = ButterKnife.bind(this);
+        binding = UploadListLayoutBinding.inflate(getLayoutInflater());
+        setContentView(binding.getRoot());
 
-        swipeListRefreshLayout = findViewById(R.id.swipe_containing_list);
+        swipeListRefreshLayout = binding.swipeContainingList;
 
         // this activity has no file really bound, it's for multiple accounts at the same time; should no inherit
         // from FileActivity; moreover, some behaviours inherited from FileActivity should be delegated to Fragments;
@@ -161,15 +137,16 @@ public class UploadListActivity extends FileActivity {
     }
 
     private void setupContent() {
-        recyclerView = findViewById(android.R.id.list);
-        recyclerView.setEmptyView(findViewById(R.id.empty_list_view));
-        findViewById(R.id.empty_list_progress).setVisibility(View.GONE);
-        emptyContentIcon.setImageResource(R.drawable.uploads);
-        emptyContentIcon.getDrawable().mutate();
-        emptyContentIcon.setAlpha(0.5f);
-        emptyContentIcon.setVisibility(View.VISIBLE);
-        emptyContentHeadline.setText(noResultsHeadline);
-        emptyContentMessage.setText(noResultsMessage);
+        binding.list.setEmptyView(binding.emptyList.getRoot());
+        binding.emptyList.getRoot().setVisibility(View.GONE);
+        binding.emptyList.emptyListProgress.setVisibility(View.GONE);
+        binding.emptyList.emptyListIcon.setImageResource(R.drawable.uploads);
+        binding.emptyList.emptyListIcon.getDrawable().mutate();
+        binding.emptyList.emptyListIcon.setAlpha(0.5f);
+        binding.emptyList.emptyListIcon.setVisibility(View.VISIBLE);
+        binding.emptyList.emptyListViewHeadline.setText(getString(R.string.upload_list_empty_headline));
+        binding.emptyList.emptyListViewText.setText(getString(R.string.upload_list_empty_text_auto_upload));
+        binding.emptyList.emptyListViewText.setVisibility(View.VISIBLE);
 
         uploadListAdapter = new UploadListAdapter(this,
                                                   uploadsStorageManager,
@@ -183,10 +160,9 @@ public class UploadListActivity extends FileActivity {
         uploadListAdapter.setLayoutManager(lm);
 
         int spacing = getResources().getDimensionPixelSize(R.dimen.media_grid_spacing);
-        recyclerView.addItemDecoration(new MediaGridItemDecoration(spacing));
-        recyclerView.setLayoutManager(lm);
-        recyclerView.setAdapter(uploadListAdapter);
-
+        binding.list.addItemDecoration(new MediaGridItemDecoration(spacing));
+        binding.list.setLayoutManager(lm);
+        binding.list.setAdapter(uploadListAdapter);
 
         swipeListRefreshLayout.setOnRefreshListener(this::refresh);
 
@@ -400,9 +376,4 @@ public class UploadListActivity extends FileActivity {
 
         }
     }
-
-    public void onDestroy() {
-        super.onDestroy();
-        unbinder.unbind();
-    }
 }

+ 21 - 12
src/main/res/layout/empty_list.xml

@@ -19,15 +19,24 @@
   License along with this program. If not, see <http://www.gnu.org/licenses/>.
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:app="http://schemas.android.com/apk/res-auto"
-              android:id="@+id/empty_list_view"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:layout_gravity="center"
-              android:layout_margin="@dimen/standard_margin"
-              android:gravity="center_vertical|center_horizontal"
-              android:orientation="vertical"
-              android:paddingBottom="@dimen/standard_double_margin">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center"
+    android:layout_margin="@dimen/standard_margin"
+    android:gravity="center_vertical|center_horizontal"
+    android:orientation="vertical"
+    android:paddingBottom="@dimen/standard_double_margin">
+
+    <!-- This can be removed once we switched to view data implementation -->
+    <LinearLayout
+        android:id="@+id/empty_list_view"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_margin="@dimen/standard_margin"
+        android:gravity="center_vertical|center_horizontal"
+        android:orientation="vertical">
 
     <ImageView
         android:id="@+id/empty_list_icon"
@@ -41,7 +50,7 @@
         android:id="@+id/empty_list_progress"
         android:layout_width="@dimen/empty_list_progress_layout_width"
         android:layout_height="@dimen/empty_list_progress_layout_height"
-        android:layout_gravity="center_horizontal"/>
+        android:layout_gravity="center_horizontal" />
 
     <TextView
         android:id="@+id/empty_list_view_headline"
@@ -54,7 +63,7 @@
         android:paddingBottom="@dimen/standard_half_padding"
         android:paddingTop="@dimen/standard_padding"
         android:text="@string/file_list_loading"
-        android:textSize="26sp"/>
+        android:textSize="26sp" />
 
     <TextView
         android:id="@+id/empty_list_view_text"
@@ -76,5 +85,5 @@
         app:cornerRadius="@dimen/button_corner_radius"
         android:layout_marginTop="@dimen/standard_half_margin"
         android:visibility="gone"/>
-
+    </LinearLayout>
 </LinearLayout>

+ 7 - 5
src/main/res/layout/toolbar_standard.xml

@@ -20,11 +20,13 @@
   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
 <com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                                            xmlns:app="http://schemas.android.com/apk/res-auto"
-                                            android:id="@+id/appbar"
-                                            android:layout_width="match_parent"
-                                            android:layout_height="wrap_content"
-                                            android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/appbar"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:viewBindingIgnore="true"
+    android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
 
     <RelativeLayout
         android:layout_width="match_parent"

+ 3 - 1
src/main/res/layout/upload_list_layout.xml

@@ -54,7 +54,9 @@
 
             </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
-            <include layout="@layout/empty_list"/>
+            <include
+                android:id="@+id/empty_list"
+                layout="@layout/empty_list" />
 
         </FrameLayout>