diff --git a/README.md b/README.md
index 580adff..935eadf 100644
--- a/README.md
+++ b/README.md
@@ -12,8 +12,6 @@ This component implements transition animation to crumble view into tiny pieces.
Check this project on dribbble.
-Also, read how it was done in [our blog](https://yalantis.com/blog/star-wars-the-force-awakens-or-how-to-crumble-view-into-tiny-pieces-on-android)
-
##Requirements
- Android SDK 15+
- OpenGL ES 2.0+
@@ -24,7 +22,7 @@ Add to your module's build.gradle:
```Groovy
dependencies {
//...
- compile 'com.yalantis:starwarstiles:0.1.1'
+ implementation 'com.yalantis:starwarstiles:0.1.2'
}
```
diff --git a/build.gradle b/build.gradle
index e370516..2a7aacb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,12 +2,11 @@
buildscript {
repositories {
- jcenter()
- maven { url 'https://maven.fabric.io/public' }
+ google()
+ mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0-alpha3'
- classpath 'io.fabric.tools:gradle:1.21.0'
+ classpath 'com.android.tools.build:gradle:7.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -16,7 +15,8 @@ buildscript {
allprojects {
repositories {
- jcenter()
+ google()
+ mavenCentral()
}
}
diff --git a/demo/build.gradle b/demo/build.gradle
index ad840a5..276c448 100644
--- a/demo/build.gradle
+++ b/demo/build.gradle
@@ -1,31 +1,15 @@
-buildscript {
- repositories {
- maven { url 'https://maven.fabric.io/public' }
- }
-
- dependencies {
- classpath 'io.fabric.tools:gradle:1.21.0'
- }
-}
apply plugin: 'com.android.application'
-repositories {
- maven { url 'https://maven.fabric.io/public' }
-}
-
-apply plugin: 'io.fabric'
-
-
android {
- compileSdkVersion 23
- buildToolsVersion '23.0.2'
+ compileSdkVersion 33
+ buildToolsVersion '30.0.3'
defaultConfig {
applicationId "com.yalantis.starwarsdemo"
minSdkVersion 15
- targetSdkVersion 23
- versionCode 1
- versionName "0.1.0"
+ targetSdkVersion 33
+ versionCode 2
+ versionName "0.1.2"
}
buildTypes {
release {
@@ -33,22 +17,20 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
- dataBinding {
- enabled = false
+ buildFeatures {
+ viewBinding = true
}
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:23.1.1'
- compile 'com.android.support:design:23.1.1'
- compile 'com.jakewharton.timber:timber:4.1.0'
- compile 'com.jakewharton:butterknife:7.0.1'
- compile 'com.android.support:recyclerview-v7:23.1.1'
- compile 'com.android.support:percent:23.1.1'
- compile project(':library')
- compile('com.crashlytics.sdk.android:crashlytics:2.5.3@aar') {
- transitive = true;
- }
+ implementation project(':library')
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+ implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'com.google.android.material:material:1.6.1'
+ implementation 'androidx.recyclerview:recyclerview:1.2.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+
+ implementation "com.jakewharton.timber:timber:4.7.1"
+ testImplementation 'junit:junit:4.13.2'
}
diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml
index fb9d454..0630180 100644
--- a/demo/src/main/AndroidManifest.xml
+++ b/demo/src/main/AndroidManifest.xml
@@ -1,22 +1,22 @@
+ package="com.yalantis.starwarsdemo">
-
+
+ android:label="@string/sw_lib_name">
+ android:exported="true">
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/App.java b/demo/src/main/java/com/yalantis/starwarsdemo/App.java
index dddbbbf..d14a032 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/App.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/App.java
@@ -3,22 +3,18 @@
import android.app.Application;
import android.content.Context;
-import com.crashlytics.android.Crashlytics;
-import io.fabric.sdk.android.Fabric;
import timber.log.Timber;
/**
* Created by Artem Kholodnyi on 11/2/15.
*/
-public class App extends Application{
+public class App extends Application {
private static App app;
@Override
public void onCreate() {
super.onCreate();
- Fabric.with(this, new Crashlytics());
app = this;
-
Timber.plant(new Timber.DebugTree());
}
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java b/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java
index cb43260..aa21c6a 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/adapter/ProfileAdapter.java
@@ -1,23 +1,23 @@
package com.yalantis.starwarsdemo.adapter;
import android.content.Context;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
-import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.TextView;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewbinding.ViewBinding;
+
import com.yalantis.starwarsdemo.R;
+import com.yalantis.starwarsdemo.databinding.ItemProfileGenderBinding;
+import com.yalantis.starwarsdemo.databinding.ItemProfileOtherBinding;
+import com.yalantis.starwarsdemo.databinding.ItemProfileSideBinding;
import com.yalantis.starwarsdemo.interfaces.ProfileAdapterListener;
import com.yalantis.starwarsdemo.model.User;
import com.yalantis.starwarsdemo.widget.BackgroundDrawableSwitchCompat;
-import butterknife.Bind;
-import butterknife.ButterKnife;
-
/**
* Created by Artem Kholodnyi on 11/17/15.
*/
@@ -26,7 +26,7 @@ public class ProfileAdapter extends RecyclerView.Adapter
+ mListener.onSideSwitch(holder.mySwitch));
holder.label.setText(mUser.getSideText());
break;
case 1:
@@ -122,22 +116,25 @@ public int getItemCount() {
return 5;
}
- public class ViewHolder extends RecyclerView.ViewHolder {
+ class ViewHolder extends RecyclerView.ViewHolder {
@Nullable
- @Bind(R.id.side_switch)
BackgroundDrawableSwitchCompat mySwitch;
-
@Nullable
- @Bind(R.id.tv_label)
TextView label;
-
@Nullable
- @Bind(R.id.tv_value)
TextView value;
- public ViewHolder(View itemView) {
- super(itemView);
- ButterKnife.bind(this, itemView);
+ public ViewHolder(ViewBinding binding) {
+ super(binding.getRoot());
+ if (binding instanceof ItemProfileSideBinding) {
+ mySwitch = ((ItemProfileSideBinding) binding).sideSwitch;
+ label = ((ItemProfileSideBinding) binding).tvLabel;
+ } else if (binding instanceof ItemProfileOtherBinding) {
+ label = ((ItemProfileOtherBinding) binding).tvLabel;
+ value = ((ItemProfileOtherBinding) binding).tvValue;
+ } else if (binding instanceof ItemProfileGenderBinding) {
+ label = ((ItemProfileGenderBinding) binding).tvLabel;
+ }
}
}
}
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/interfaces/ProfileAdapterListener.java b/demo/src/main/java/com/yalantis/starwarsdemo/interfaces/ProfileAdapterListener.java
index eae06cd..9ab5c1a 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/interfaces/ProfileAdapterListener.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/interfaces/ProfileAdapterListener.java
@@ -1,6 +1,6 @@
package com.yalantis.starwarsdemo.interfaces;
-import android.support.v7.widget.SwitchCompat;
+import androidx.appcompat.widget.SwitchCompat;
/**
* Created by Artem Kholodnyi on 11/17/15.
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/model/User.java b/demo/src/main/java/com/yalantis/starwarsdemo/model/User.java
index 599d5b0..f7ce0d1 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/model/User.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/model/User.java
@@ -1,7 +1,7 @@
package com.yalantis.starwarsdemo.model;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.StringRes;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.StringRes;
import com.yalantis.starwarsdemo.R;
@@ -21,7 +21,8 @@ public User(boolean darkSide, String fullName, String homeworld, String birthday
mBirthday = birthday;
}
- public @DrawableRes int getPhotoRes() {
+ public @DrawableRes
+ int getPhotoRes() {
return mDarkSide ? R.drawable.darth : R.drawable.anakin;
}
@@ -41,7 +42,8 @@ public String getBirthday() {
return mBirthday;
}
- public @StringRes int getSideText() {
+ public @StringRes
+ int getSideText() {
return isDarkSide() ? R.string.dark_side_label : R.string.light_side_label;
}
}
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystem.java b/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystem.java
index 7bc497e..aca12b8 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystem.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystem.java
@@ -24,7 +24,7 @@
public class ParticleSystem implements Renderable {
private final ParticleSystemRenderer mRenderer;
public static final int PARTICLE_COUNT = 1_000;
- private int mBufferId;
+ private final int mBufferId;
public static final int POS_DATA_SIZE = 3;
public static final int TEXTURE_COORDS_DATA_SIZE = 2;
@@ -39,7 +39,7 @@ public ParticleSystem(ParticleSystemRenderer renderer, FloatBuffer vertexBuffer)
Timber.d("generated in %d ms", System.currentTimeMillis() - startTime);
// Copy buffer into OpenGL's memory. After, we don't need to keep the client-side buffers around.
- final int buffers[] = new int[1];
+ final int[] buffers = new int[1];
glGenBuffers(1, buffers, 0);
glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystemRenderer.java b/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystemRenderer.java
index ab2a642..d8a002b 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystemRenderer.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/particlesys/ParticleSystemRenderer.java
@@ -34,22 +34,22 @@ public class ParticleSystemRenderer implements GLSurfaceView.Renderer {
public int sizeX = 35;
public int sizeY = 70;
public float mTime;
- private GLSurfaceView mGlSurfaceView;
+ private final GLSurfaceView mGlSurfaceView;
/**
* Store the model matrix. This matrix is used to move models from object space (where each model can be thought
* of being located at the center of the universe) to world space.
*/
- private float[] mModelMatrix = new float[16];
+ private final float[] mModelMatrix = new float[16];
/**
* Store the view matrix. This can be thought of as our camera. This matrix transforms world space to eye space;
* it positions things relative to our eye.
*/
- private float[] mViewMatrix = new float[16];
+ private final float[] mViewMatrix = new float[16];
/** Store the projection matrix. This is used to project the scene onto a 2D viewport. */
- private float[] mProjectionMatrix = new float[16];
+ private final float[] mProjectionMatrix = new float[16];
/** Allocate storage for the final combined matrix. This will be passed into the shader program. */
- private float[] mMVPMatrix = new float[16];
- private float[] mTemporaryMatrix = new float[16];
+ private final float[] mMVPMatrix = new float[16];
+ private final float[] mTemporaryMatrix = new float[16];
private int timeHandle;
private long mStartTime;
private int frames;
@@ -59,7 +59,7 @@ public class ParticleSystemRenderer implements GLSurfaceView.Renderer {
private float dt;
private long t_current;
private long t_prev;
- private float dt_prev = 1;
+ private final float dt_prev = 1;
private ValueAnimator animator;
private Bitmap mBitmap;
private ParticleSystem mParticleSystem;
@@ -68,7 +68,7 @@ public class ParticleSystemRenderer implements GLSurfaceView.Renderer {
private int mHeight;
private int timesRepeated;
private float delta;
- private ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+ private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
public ParticleSystemRenderer(GLSurfaceView glSurfaceView) {
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java b/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java
index a6b7a3a..47892fa 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/view/DemoActivity.java
@@ -6,12 +6,14 @@
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.os.Handler;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.AppCompatActivity;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
import com.yalantis.starwarsdemo.R;
+import com.yalantis.starwarsdemo.databinding.ActivityDemoBinding;
import com.yalantis.starwarsdemo.interfaces.DemoActivityInterface;
import com.yalantis.starwarsdemo.interfaces.GreetingFragmentInterface;
import com.yalantis.starwarsdemo.interfaces.TilesRendererInterface;
@@ -19,16 +21,14 @@
import java.util.List;
-import butterknife.Bind;
-import butterknife.ButterKnife;
/**
* Created by Artem Kholodnyi on 11/11/15.
*/
public class DemoActivity extends AppCompatActivity implements GreetingFragmentInterface,
DemoActivityInterface, TilesRendererInterface {
- @Bind(R.id.gl_surface_view)
- GLSurfaceView mGlSurfaceView;
+
+ private ActivityDemoBinding binding;
private SideFragment mDarkFragment;
private SideFragment mBrightFragment;
@@ -37,9 +37,8 @@ public class DemoActivity extends AppCompatActivity implements GreetingFragmentI
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-
- setContentView(R.layout.activity_demo);
- ButterKnife.bind(this);
+ binding = ActivityDemoBinding.inflate(getLayoutInflater());
+ setContentView(binding.getRoot());
// Check if the system supports OpenGL ES 2.0.
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
@@ -48,12 +47,12 @@ protected void onCreate(Bundle savedInstanceState) {
if (supportsEs2) {
// Request an OpenGL ES 2.0 compatible context.
- mGlSurfaceView.setEGLContextClientVersion(2);
+ binding.glSurfaceView.setEGLContextClientVersion(2);
// Set the renderer to our demo renderer, defined below.
- ParticleSystemRenderer mRenderer = new ParticleSystemRenderer(mGlSurfaceView);
- mGlSurfaceView.setRenderer(mRenderer);
- mGlSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
+ ParticleSystemRenderer mRenderer = new ParticleSystemRenderer(binding.glSurfaceView);
+ binding.glSurfaceView.setRenderer(mRenderer);
+ binding.glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
} else {
throw new UnsupportedOperationException();
}
@@ -67,13 +66,13 @@ protected void onCreate(Bundle savedInstanceState) {
@Override
protected void onPause() {
super.onPause();
- mGlSurfaceView.onPause();
+ binding.glSurfaceView.onPause();
}
@Override
protected void onResume() {
super.onResume();
- mGlSurfaceView.onResume();
+ binding.glSurfaceView.onResume();
}
private void showGreetings() {
@@ -86,15 +85,10 @@ private void showGreetings() {
@Override
public void onSetupProfileClick() {
- new Handler().post(new Runnable() {
- @Override
- public void run() {
- getSupportFragmentManager().beginTransaction()
- .setCustomAnimations(R.anim.slide_upward, 0)
- .add(R.id.container, BrightSideFragment.newInstance(), "bright")
- .commit();
- }
- });
+ new Handler().post(() -> getSupportFragmentManager().beginTransaction()
+ .setCustomAnimations(R.anim.slide_upward, 0)
+ .add(R.id.container, BrightSideFragment.newInstance(), "bright")
+ .commit());
}
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java b/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java
index 1dd1de7..747a43c 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/view/GreetingsFragment.java
@@ -1,29 +1,24 @@
package com.yalantis.starwarsdemo.view;
import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
import com.yalantis.starwarsdemo.R;
+import com.yalantis.starwarsdemo.databinding.FragmentGreetingsBinding;
import com.yalantis.starwarsdemo.interfaces.GreetingFragmentInterface;
-import butterknife.Bind;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-
/**
* Created by Artem Kholodnyi on 11/17/15.
*/
public class GreetingsFragment extends Fragment {
public final static String TAG = GreetingsFragment.class.getCanonicalName();
- @Bind(R.id.toolbar)
- Toolbar mToolbar;
-
+ private FragmentGreetingsBinding binding;
private GreetingFragmentInterface mListener;
public static GreetingsFragment newInstance() {
@@ -39,26 +34,14 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_greetings, container, false);
- ButterKnife.bind(this, view);
- return view;
+ binding = FragmentGreetingsBinding.inflate(onGetLayoutInflater(savedInstanceState), container, false);
+ return binding.getRoot();
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- mToolbar.setNavigationIcon(R.drawable.ic_menu);
+ binding.toolbar.setNavigationIcon(R.drawable.ic_menu);
+ binding.btnSetupProfile.setOnClickListener(v -> mListener.onSetupProfileClick());
}
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- ButterKnife.unbind(this);
- }
-
- @OnClick(R.id.btn_setup_profile)
- void onClick() {
- mListener.onSetupProfileClick();
- }
-
}
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java b/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java
index 3865fa2..bec42d8 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/view/SideFragment.java
@@ -2,41 +2,34 @@
import android.animation.Animator;
import android.animation.ObjectAnimator;
-import android.app.Activity;
+import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.StyleRes;
-import android.support.design.widget.AppBarLayout;
-import android.support.design.widget.CollapsingToolbarLayout;
-import android.support.v4.app.Fragment;
-import android.support.v7.view.ContextThemeWrapper;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.SwitchCompat;
-import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
-import android.view.MenuItem;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
-import android.widget.ImageView;
-import com.yalantis.starwars.TilesFrameLayout;
+import androidx.annotation.NonNull;
+import androidx.annotation.StyleRes;
+import androidx.appcompat.view.ContextThemeWrapper;
+import androidx.appcompat.widget.SwitchCompat;
+import androidx.appcompat.widget.Toolbar;
+import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
import com.yalantis.starwars.interfaces.TilesFrameLayoutListener;
import com.yalantis.starwarsdemo.R;
import com.yalantis.starwarsdemo.adapter.ProfileAdapter;
+import com.yalantis.starwarsdemo.databinding.FragmentSideBinding;
import com.yalantis.starwarsdemo.interfaces.DemoActivityInterface;
import com.yalantis.starwarsdemo.interfaces.ProfileAdapterListener;
import com.yalantis.starwarsdemo.interfaces.TilesRendererInterface;
import com.yalantis.starwarsdemo.model.User;
import com.yalantis.starwarsdemo.widget.ClipRevealFrame;
-import butterknife.Bind;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-
/**
* Created by Artem Kholodnyi on 11/19/15.
*/
@@ -47,27 +40,14 @@ public abstract class SideFragment extends Fragment implements ProfileAdapterLis
public static final String ARG_SHOULD_EXPAND = "should expand";
private static final long ANIM_DURATION = 250L;
protected float mRadius;
- @Bind(R.id.recycler)
- RecyclerView mRecycler;
- @Bind(R.id.toolbar)
- Toolbar mToolbar;
- @Bind(R.id.header)
- ImageView mHeader;
- @Bind(R.id.tessellation_frame_layout)
- TilesFrameLayout mTilesFrameLayout;
- @Bind(R.id.collapsing_toolbar_layout)
- CollapsingToolbarLayout mCollapsingToolbarLayout;
- @Bind(R.id.app_bar_layout)
- AppBarLayout mAppBarLayout;
- private View mRootView;
- private Toolbar.OnMenuItemClickListener onMenuItemClickListener = new Toolbar.OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(final MenuItem item) {
- if (R.id.action_close == item.getItemId()) {
- doBreak();
- }
- return false;
+
+ private FragmentSideBinding binding;
+
+ private final Toolbar.OnMenuItemClickListener onMenuItemClickListener = item -> {
+ if (R.id.action_close == item.getItemId()) {
+ doBreak();
}
+ return false;
};
private TilesRendererInterface mTilesListener;
private DemoActivityInterface mDemoActivityInterface;
@@ -81,23 +61,22 @@ public void onResume() {
@Override
public void onPause() {
super.onPause();
- mTilesFrameLayout.onPause();
+ binding.tessellationFrameLayout.onPause();
}
@Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- if (activity instanceof TilesRendererInterface) {
- if (activity instanceof TilesRendererInterface) {
- mTilesListener = (TilesRendererInterface) activity;
- }
- if (activity instanceof DemoActivityInterface) {
- mDemoActivityInterface = (DemoActivityInterface) activity;
- }
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ if (context instanceof TilesRendererInterface) {
+ mTilesListener = (TilesRendererInterface) context;
+ }
+ if (context instanceof DemoActivityInterface) {
+ mDemoActivityInterface = (DemoActivityInterface) context;
}
}
- abstract @StyleRes int getTheme();
+ abstract @StyleRes
+ int getTheme();
protected Animator createCheckoutRevealAnimator(final ClipRevealFrame view, int x, int y, float startRadius, float endRadius) {
setMenuVisibility(false);
@@ -147,12 +126,12 @@ private void removeOldSideFragment() {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- mRootView = inflater.cloneInContext(new ContextThemeWrapper(getContext(), getTheme()))
- .inflate(R.layout.fragment_side, container, false);
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ binding = FragmentSideBinding.inflate(onGetLayoutInflater(savedInstanceState).cloneInContext(new ContextThemeWrapper(getContext(), getTheme())), container, false);
+
final Bundle args = getArguments();
if (args != null) {
- mRootView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ binding.getRoot().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop,
int oldRight, int oldBottom) {
@@ -174,25 +153,25 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int
});
}
- ButterKnife.bind(this, mRootView);
- return mRootView;
+ return binding.getRoot();
}
-
-
-
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- mTilesFrameLayout.setOnAnimationFinishedListener(this);
- mRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
- mRecycler.setAdapter(new ProfileAdapter(getContext(), getUser(), this));
- setUpToolbar(mToolbar);
- mHeader.setImageResource(getUser().getPhotoRes());
+ binding.tessellationFrameLayout.setOnAnimationFinishedListener(this);
+ binding.recycler.setLayoutManager(new LinearLayoutManager(getContext()));
+ binding.recycler.setAdapter(new ProfileAdapter(getContext(), getUser(), this));
+ setUpToolbar(binding.toolbar);
+ binding.header.setImageResource(getUser().getPhotoRes());
if (getArguments() != null) {
- mAppBarLayout.setExpanded(getArguments().getBoolean(ARG_SHOULD_EXPAND), false);
+ binding.appBarLayout.setExpanded(getArguments().getBoolean(ARG_SHOULD_EXPAND), false);
}
+
+ binding.btnSave.setOnClickListener(v -> {
+ doBreak();
+ });
}
@Override
@@ -212,13 +191,6 @@ private void setUpToolbar(final Toolbar toolbar) {
abstract User getUser();
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- ButterKnife.unbind(this);
- }
-
@Override
public void onSideSwitch(SwitchCompat v) {
Rect rect = new Rect();
@@ -230,7 +202,7 @@ public void onSideSwitch(SwitchCompat v) {
if (this instanceof BrightSideFragment && v.isChecked()) {
cx = rect.right - halfThumbWidth;
postGoToSide(cy, cx, "dark");
- } else if (!v.isChecked()){
+ } else if (!v.isChecked()) {
cx = rect.left + halfThumbWidth;
postGoToSide(cy, cx, "bright");
}
@@ -248,7 +220,7 @@ public void run() {
}
private boolean isAppBarExpanded() {
- return mAppBarLayout != null && mAppBarLayout.getBottom() == mAppBarLayout.getHeight();
+ return binding.appBarLayout.getBottom() == binding.appBarLayout.getHeight();
}
public int getStatusBarHeight() {
@@ -264,9 +236,7 @@ public void doBreak() {
if (mDemoActivityInterface != null) {
mDemoActivityInterface.removeAllFragmentExcept(getTagString());
}
- if (mTilesFrameLayout != null) {
- mTilesFrameLayout.startAnimation();
- }
+ binding.tessellationFrameLayout.startAnimation();
}
@Override
@@ -277,9 +247,4 @@ public void onAnimationFinished() {
}
public abstract String getTagString();
-
- @OnClick(R.id.btn_save)
- void onClick() {
- doBreak();
- }
}
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/widget/BackgroundDrawableSwitchCompat.java b/demo/src/main/java/com/yalantis/starwarsdemo/widget/BackgroundDrawableSwitchCompat.java
index c2aaee2..3bb24dc 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/widget/BackgroundDrawableSwitchCompat.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/widget/BackgroundDrawableSwitchCompat.java
@@ -1,5 +1,7 @@
package com.yalantis.starwarsdemo.widget;
+import static android.graphics.PixelFormat.UNKNOWN;
+
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
@@ -7,13 +9,14 @@
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LevelListDrawable;
-import android.support.annotation.IntRange;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.widget.SwitchCompat;
import android.util.AttributeSet;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
+import androidx.annotation.IntRange;
+import androidx.appcompat.widget.SwitchCompat;
+import androidx.core.content.ContextCompat;
+
import com.yalantis.starwarsdemo.R;
/**
@@ -103,7 +106,7 @@ public void setColorFilter(ColorFilter colorFilter) {
@Override
public int getOpacity() {
- return 0;
+ return UNKNOWN;
}
private void setBlend(@IntRange(from = TRANSPARENT, to = OPAQUE) int k) {
diff --git a/demo/src/main/java/com/yalantis/starwarsdemo/widget/CenterTopImageView.java b/demo/src/main/java/com/yalantis/starwarsdemo/widget/CenterTopImageView.java
index 733a31e..e8f1272 100644
--- a/demo/src/main/java/com/yalantis/starwarsdemo/widget/CenterTopImageView.java
+++ b/demo/src/main/java/com/yalantis/starwarsdemo/widget/CenterTopImageView.java
@@ -3,13 +3,14 @@
import android.content.Context;
import android.graphics.Matrix;
import android.util.AttributeSet;
-import android.widget.ImageView;
+
+import androidx.appcompat.widget.AppCompatImageView;
/**
* Created by Artem Kholodnyi on 11/23/15.
*/
-public class CenterTopImageView extends ImageView {
- private Matrix matrix = new Matrix();
+public class CenterTopImageView extends AppCompatImageView {
+ private final Matrix matrix = new Matrix();
public CenterTopImageView(Context context) {
super(context);
@@ -33,7 +34,7 @@ private void init() {
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (getDrawable() != null) {
- float k = (right - left) / (float)getDrawable().getIntrinsicWidth();
+ float k = (right - left) / (float) getDrawable().getIntrinsicWidth();
matrix.setScale(k, k);
setImageMatrix(matrix);
}
diff --git a/demo/src/main/res/anim/slide_downward.xml b/demo/src/main/res/anim/slide_downward.xml
index 2549e57..cc9324e 100644
--- a/demo/src/main/res/anim/slide_downward.xml
+++ b/demo/src/main/res/anim/slide_downward.xml
@@ -1,10 +1,10 @@
+ android:duration="@android:integer/config_mediumAnimTime"
+ android:interpolator="@android:interpolator/linear">
-
+
diff --git a/demo/src/main/res/anim/slide_upward.xml b/demo/src/main/res/anim/slide_upward.xml
index 29f71ab..8f2be35 100644
--- a/demo/src/main/res/anim/slide_upward.xml
+++ b/demo/src/main/res/anim/slide_upward.xml
@@ -3,8 +3,7 @@
android:duration="@android:integer/config_mediumAnimTime">
-
+ android:fromYDelta="100%p"
+ android:startOffset="0"
+ android:toYDelta="0" />
diff --git a/demo/src/main/res/layout/activity_demo.xml b/demo/src/main/res/layout/activity_demo.xml
index 5974871..11c8d68 100644
--- a/demo/src/main/res/layout/activity_demo.xml
+++ b/demo/src/main/res/layout/activity_demo.xml
@@ -1,19 +1,17 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ android:layout_height="match_parent" />
+ android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/demo/src/main/res/layout/fragment_greetings.xml b/demo/src/main/res/layout/fragment_greetings.xml
index b39d3fe..d6d6cdf 100644
--- a/demo/src/main/res/layout/fragment_greetings.xml
+++ b/demo/src/main/res/layout/fragment_greetings.xml
@@ -1,60 +1,67 @@
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/logo" />
+ android:text="@string/btn_setup_profile"
+ android:textAllCaps="false"
+ android:textColor="@android:color/white"
+ android:textSize="20sp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/greetings" />
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/demo/src/main/res/layout/fragment_side.xml b/demo/src/main/res/layout/fragment_side.xml
index f2fc64d..cc18ac4 100644
--- a/demo/src/main/res/layout/fragment_side.xml
+++ b/demo/src/main/res/layout/fragment_side.xml
@@ -1,84 +1,76 @@
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ app:sw_numberOfTilesX="35">
-
-
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/appbar_height">
-
+ app:contentScrim="?attr/toolbarBackground"
+ app:expandedTitleTextAppearance="@style/TransparentTextAppearance"
+ app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
+ android:layout_gravity="top"
+ app:layout_collapseMode="parallax" />
-
+ android:layout_height="?attr/actionBarSize"
+ app:layout_collapseMode="pin" />
-
+
-
+
-
+ app:layout_behavior="@string/appbar_scrolling_view_behavior" />
+ android:textColor="@android:color/white" />
-
+
diff --git a/demo/src/main/res/layout/fragment_star_wars.xml b/demo/src/main/res/layout/fragment_star_wars.xml
index 53f4e7e..f574486 100644
--- a/demo/src/main/res/layout/fragment_star_wars.xml
+++ b/demo/src/main/res/layout/fragment_star_wars.xml
@@ -1,5 +1,4 @@
-
+ android:layout_height="match_parent" />
diff --git a/demo/src/main/res/layout/item_profile_gender.xml b/demo/src/main/res/layout/item_profile_gender.xml
index c148784..0b34d10 100644
--- a/demo/src/main/res/layout/item_profile_gender.xml
+++ b/demo/src/main/res/layout/item_profile_gender.xml
@@ -1,34 +1,34 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal">
+ android:layout_gravity="left" />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:orientation="horizontal">
+
+
-
-
+
diff --git a/demo/src/main/res/layout/item_profile_other.xml b/demo/src/main/res/layout/item_profile_other.xml
index 3527ab1..3cf2aae 100644
--- a/demo/src/main/res/layout/item_profile_other.xml
+++ b/demo/src/main/res/layout/item_profile_other.xml
@@ -1,18 +1,17 @@
-
+ android:orientation="vertical">
+ tools:text="full name" />
+ tools:ignore="RtlHardcoded"
+ tools:text="Darth Vader" />
diff --git a/demo/src/main/res/layout/item_profile_side.xml b/demo/src/main/res/layout/item_profile_side.xml
index 4f11f9a..d894eb0 100644
--- a/demo/src/main/res/layout/item_profile_side.xml
+++ b/demo/src/main/res/layout/item_profile_side.xml
@@ -1,22 +1,19 @@
-
+
+ android:layout_height="wrap_content" />
+ android:layout_gravity="right" />
diff --git a/demo/src/main/res/menu/menu_star_wars.xml b/demo/src/main/res/menu/menu_star_wars.xml
index a40ba00..12e8970 100644
--- a/demo/src/main/res/menu/menu_star_wars.xml
+++ b/demo/src/main/res/menu/menu_star_wars.xml
@@ -1,10 +1,10 @@
diff --git a/demo/src/main/res/raw/star_frag.glsl b/demo/src/main/res/raw/star_frag.glsl
index 2dd5015..404137e 100644
--- a/demo/src/main/res/raw/star_frag.glsl
+++ b/demo/src/main/res/raw/star_frag.glsl
@@ -1,4 +1,4 @@
-precision mediump float;
+precision highp float; // Set the default precision to medium. We don't need as high of a precision in the fragment shader.
uniform float u_Time;
uniform vec2 u_Resolution;
diff --git a/demo/src/main/res/values/styles.xml b/demo/src/main/res/values/styles.xml
index b12adc4..3e0eecb 100644
--- a/demo/src/main/res/values/styles.xml
+++ b/demo/src/main/res/values/styles.xml
@@ -1,4 +1,5 @@
+
@@ -24,23 +25,23 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+