diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 1e77c1498..54d5573c6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -1602,7 +1602,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr if(att.isUploadingOrProcessing()) att.cancelUpload(); attachments.remove(att); - uploadNextQueuedAttachment(); + if(!areThereAnyUploadingAttachments()) + uploadNextQueuedAttachment(); attachmentsView.removeView(att.view); if(getMediaAttachmentsCount()==0) attachmentsView.setVisibility(View.GONE); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java index b11047400..6b6097458 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/SplashFragment.java @@ -1,43 +1,47 @@ package org.joinmastodon.android.fragments; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.drawable.Drawable; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.text.SpannableString; -import android.text.style.ReplacementSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowInsets; -import android.widget.LinearLayout; -import android.widget.TextView; +import android.widget.Button; +import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; +import org.joinmastodon.android.api.requests.instance.GetInstance; import org.joinmastodon.android.fragments.onboarding.InstanceCatalogSignupFragment; import org.joinmastodon.android.fragments.onboarding.InstanceChooserLoginFragment; +import org.joinmastodon.android.fragments.onboarding.InstanceRulesFragment; +import org.joinmastodon.android.model.Instance; +import org.joinmastodon.android.ui.InterpolatingMotionEffect; +import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.views.SizeListenerFrameLayout; +import org.parceler.Parcels; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager2.widget.ViewPager2; import me.grishka.appkit.Nav; +import me.grishka.appkit.api.Callback; +import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.fragments.AppKitFragment; import me.grishka.appkit.utils.V; +import me.grishka.appkit.views.BottomSheet; public class SplashFragment extends AppKitFragment{ + private static final String DEFAULT_SERVER="mastodon.social"; + private SizeListenerFrameLayout contentView; private View artContainer, blueFill, greenFill; - private ViewPager2 pager; - private ViewGroup pagerDots; + private InterpolatingMotionEffect motionEffect; private View artClouds, artPlaneElephant, artRightHill, artLeftHill, artCenterHill; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); + motionEffect=new InterpolatingMotionEffect(MastodonApp.context); } @Nullable @@ -46,44 +50,26 @@ public class SplashFragment extends AppKitFragment{ contentView=(SizeListenerFrameLayout) inflater.inflate(R.layout.fragment_splash, container, false); contentView.findViewById(R.id.btn_get_started).setOnClickListener(this::onButtonClick); contentView.findViewById(R.id.btn_log_in).setOnClickListener(this::onButtonClick); + Button joinDefault=contentView.findViewById(R.id.btn_join_default_server); + joinDefault.setText(getString(R.string.join_default_server, DEFAULT_SERVER)); + joinDefault.setOnClickListener(this::onJoinDefaultServerClick); + contentView.findViewById(R.id.btn_learn_more).setOnClickListener(this::onLearnMoreClick); + artClouds=contentView.findViewById(R.id.art_clouds); artPlaneElephant=contentView.findViewById(R.id.art_plane_elephant); artRightHill=contentView.findViewById(R.id.art_right_hill); artLeftHill=contentView.findViewById(R.id.art_left_hill); artCenterHill=contentView.findViewById(R.id.art_center_hill); - pager=contentView.findViewById(R.id.pager); - pagerDots=contentView.findViewById(R.id.pager_dots); - pager.setAdapter(new PagerAdapter()); - pager.setOffscreenPageLimit(3); - pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback(){ - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels){ - for(int i=0;i=1 ? 1f : positionOffset)); - artPlaneElephant.setTranslationX(V.dp(101.55f)*parallaxProgress); - artLeftHill.setTranslationX(V.dp(-88)*parallaxProgress); - artLeftHill.setTranslationY(V.dp(24)*parallaxProgress); - artRightHill.setTranslationX(V.dp(-88)*parallaxProgress); - artRightHill.setTranslationY(V.dp(-24)*parallaxProgress); - artCenterHill.setTranslationX(V.dp(-40)*parallaxProgress); - } - }); artContainer=contentView.findViewById(R.id.art_container); blueFill=contentView.findViewById(R.id.blue_fill); greenFill=contentView.findViewById(R.id.green_fill); + motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artClouds, V.dp(-5), V.dp(5), V.dp(-5), V.dp(5))); + motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artRightHill, V.dp(-15), V.dp(25), V.dp(-10), V.dp(10))); + motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artLeftHill, V.dp(-25), V.dp(15), V.dp(-15), V.dp(15))); + motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artCenterHill, V.dp(-14), V.dp(14), V.dp(-5), V.dp(25))); + motionEffect.addViewEffect(new InterpolatingMotionEffect.ViewEffect(artPlaneElephant, V.dp(-20), V.dp(12), V.dp(-20), V.dp(12))); + artContainer.setOnTouchListener(motionEffect); contentView.setSizeListener(new SizeListenerFrameLayout.OnSizeChangedListener(){ @Override @@ -109,6 +95,38 @@ public class SplashFragment extends AppKitFragment{ Nav.go(getActivity(), isSignup ? InstanceCatalogSignupFragment.class : InstanceChooserLoginFragment.class, extras); } + private void onJoinDefaultServerClick(View v){ + new GetInstance() + .setCallback(new Callback<>(){ + @Override + public void onSuccess(Instance result){ + if(getActivity()==null) + return; + Bundle args=new Bundle(); + args.putParcelable("instance", Parcels.wrap(result)); + Nav.go(getActivity(), InstanceRulesFragment.class, args); + } + + @Override + public void onError(ErrorResponse error){ + if(getActivity()==null) + return; + error.showToast(getActivity()); + } + }) + .wrapProgress(getActivity(), R.string.loading_instance, true) + .execNoAuth(DEFAULT_SERVER); + } + + private void onLearnMoreClick(View v){ + View sheetView=getActivity().getLayoutInflater().inflate(R.layout.intro_bottom_sheet, null); + BottomSheet sheet=new BottomSheet(getActivity()); + sheet.setContentView(sheetView); + sheet.setNavigationBarBackground(new ColorDrawable(UiUtils.alphaBlendColors(UiUtils.getThemeColor(getActivity(), R.attr.colorM3Surface), + UiUtils.getThemeColor(getActivity(), R.attr.colorM3Primary), 0.05f)), !UiUtils.isDarkTheme()); + sheet.show(); + } + private void updateArtSize(int w, int h){ float scale=w/(float)V.dp(360); artContainer.setScaleX(scale); @@ -139,60 +157,15 @@ public class SplashFragment extends AppKitFragment{ return true; } - private class PagerAdapter extends RecyclerView.Adapter{ - - @NonNull - @Override - public PagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){ - return new PagerViewHolder(viewType); - } - - @Override - public void onBindViewHolder(@NonNull PagerViewHolder holder, int position){} - - @Override - public int getItemCount(){ - return 3; - } - - @Override - public int getItemViewType(int position){ - return position; - } + @Override + protected void onShown(){ + super.onShown(); + motionEffect.activate(); } - private class PagerViewHolder extends RecyclerView.ViewHolder{ - public PagerViewHolder(int page){ - super(new LinearLayout(getActivity())); - LinearLayout ll=(LinearLayout) itemView; - ll.setOrientation(LinearLayout.VERTICAL); - int pad=V.dp(16); - ll.setPadding(pad, pad, pad, pad); - ll.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - - TextView title=new TextView(getActivity()); - title.setTextAppearance(R.style.m3_headline_medium); - title.setText(switch(page){ - case 0 -> getString(R.string.welcome_page1_title); - case 1 -> getString(R.string.welcome_page2_title); - case 2 -> getString(R.string.welcome_page3_title); - default -> throw new IllegalStateException("Unexpected value: "+page); - }); - title.setTextColor(0xFF17063B); - LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, V.dp(page==0 ? 46 : 36)); - lp.bottomMargin=V.dp(page==0 ? 4 : 14); - ll.addView(title, lp); - - TextView text=new TextView(getActivity()); - text.setTextAppearance(R.style.m3_body_medium); - text.setText(switch(page){ - case 0 -> R.string.welcome_page1_text; - case 1 -> R.string.welcome_page2_text; - case 2 -> R.string.welcome_page3_text; - default -> throw new IllegalStateException("Unexpected value: "+page); - }); - text.setTextColor(0xFF17063B); - ll.addView(text, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - } + @Override + protected void onHidden(){ + super.onHidden(); + motionEffect.deactivate(); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/InterpolatingMotionEffect.java b/mastodon/src/main/java/org/joinmastodon/android/ui/InterpolatingMotionEffect.java index 1302aa65d..4221d1c29 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/InterpolatingMotionEffect.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/InterpolatingMotionEffect.java @@ -1,17 +1,25 @@ package org.joinmastodon.android.ui; +import android.annotation.SuppressLint; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; +import android.view.MotionEvent; import android.view.Surface; import android.view.View; import android.view.WindowManager; +import android.view.animation.PathInterpolator; import java.util.ArrayList; -public class InterpolatingMotionEffect implements SensorEventListener{ +import androidx.dynamicanimation.animation.DynamicAnimation; +import androidx.dynamicanimation.animation.FloatValueHolder; +import androidx.dynamicanimation.animation.SpringAnimation; +import androidx.dynamicanimation.animation.SpringForce; + +public class InterpolatingMotionEffect implements SensorEventListener, View.OnTouchListener{ private SensorManager sm; private WindowManager wm; @@ -20,6 +28,34 @@ public class InterpolatingMotionEffect implements SensorEventListener{ private Sensor accelerometer; private boolean accelerometerEnabled; private ArrayList views=new ArrayList<>(); + private float pitch, roll; + private float touchDownX, touchDownY, touchAddX, touchAddY, touchAddLastAnimX, touchAddLastAnimY; + private PathInterpolator touchInterpolator=new PathInterpolator(0.5f, 1f, 0.89f, 1f); + private SpringAnimation touchSpringX, touchSpringY; + private FloatValueHolder touchSpringXHolder=new FloatValueHolder(){ + @Override + public float getValue(){ + return touchAddX; + } + + @Override + public void setValue(float value){ + touchAddX=value; + updateEffects(); + } + }; + private FloatValueHolder touchSpringYHolder=new FloatValueHolder(){ + @Override + public float getValue(){ + return touchAddY; + } + + @Override + public void setValue(float value){ + touchAddY=value; + updateEffects(); + } + }; public InterpolatingMotionEffect(Context context){ sm=context.getSystemService(SensorManager.class); @@ -50,8 +86,8 @@ public class InterpolatingMotionEffect implements SensorEventListener{ float z=event.values[2]/SensorManager.GRAVITY_EARTH; - float pitch=(float) (Math.atan2(x, Math.sqrt(y*y+z*z))/Math.PI*2.0); - float roll=(float) (Math.atan2(y, Math.sqrt(x*x+z*z))/Math.PI*2.0); + pitch=(float) (Math.atan2(x, Math.sqrt(y*y+z*z))/Math.PI*2.0); + roll=(float) (Math.atan2(y, Math.sqrt(x*x+z*z))/Math.PI*2.0); switch(rotation){ case Surface.ROTATION_0: @@ -88,9 +124,7 @@ public class InterpolatingMotionEffect implements SensorEventListener{ }else if(roll<-1f){ roll=-2f-roll; } - for(ViewEffect view:views){ - view.update(pitch, roll); - } + updateEffects(); } @Override @@ -110,6 +144,62 @@ public class InterpolatingMotionEffect implements SensorEventListener{ views.clear(); } + @SuppressLint("ClickableViewAccessibility") + @Override + public boolean onTouch(View v, MotionEvent ev){ + switch(ev.getAction()){ + case MotionEvent.ACTION_DOWN -> { + if(touchSpringX!=null){ + touchAddLastAnimX=touchAddX; + touchSpringX.cancel(); + touchSpringX=null; + }else{ + touchAddLastAnimX=0; + } + if(touchSpringY!=null){ + touchAddLastAnimY=touchAddY; + touchSpringY.cancel(); + touchSpringY=null; + }else{ + touchAddLastAnimY=0; + } + touchDownX=ev.getX(); + touchDownY=ev.getY(); + } + case MotionEvent.ACTION_MOVE -> { + touchAddX=touchInterpolator.getInterpolation(Math.min(1f, Math.abs((ev.getX()-touchDownX)/(v.getWidth()/2f)))); + touchAddY=touchInterpolator.getInterpolation(Math.min(1f, Math.abs((ev.getY()-touchDownY)/(v.getHeight()/2f)))); + if(ev.getX()>touchDownX) + touchAddX=-touchAddX; + if(ev.getY() { + touchSpringX=new SpringAnimation(touchSpringXHolder, 0f); + touchSpringX.setMinimumVisibleChange(0.01f); + touchSpringX.getSpring().setStiffness(SpringForce.STIFFNESS_LOW).setDampingRatio(0.85f); + touchSpringX.addEndListener((animation, canceled, value, velocity)->touchSpringX=null); + touchSpringX.start(); + touchSpringY=new SpringAnimation(touchSpringYHolder, 0f); + touchSpringY.setMinimumVisibleChange(0.01f); + touchSpringY.getSpring().setStiffness(SpringForce.STIFFNESS_LOW).setDampingRatio(0.85f); + touchSpringY.addEndListener((animation, canceled, value, velocity)->touchSpringY=null); + touchSpringY.start(); + updateEffects(); + } + } + return true; + } + + private void updateEffects(){ + for(ViewEffect view:views){ + view.update(Math.min(1f, Math.max(-1f, pitch+touchAddX)), Math.min(1f, Math.max(-1f, roll+touchAddY))); + } + } + public static class ViewEffect{ private View view; private float minX, maxX, minY, maxY; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java index eb0fb9056..bd1c7c06f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java @@ -1,7 +1,5 @@ package org.joinmastodon.android.ui.displayitems; -import static org.joinmastodon.android.ui.utils.MediaAttachmentViewController.altWrapPadding; - import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; @@ -202,15 +200,16 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{ btnL-=loc[0]; btnT-=loc[1]; + ViewGroup.MarginLayoutParams margins = (ViewGroup.MarginLayoutParams) altTextWrapper.getLayoutParams(); ArrayList anims=new ArrayList<>(); anims.add(ObjectAnimator.ofFloat(altTextButton, View.ALPHA, 1, 0)); anims.add(ObjectAnimator.ofFloat(noAltTextButton, View.ALPHA, 1, 0)); anims.add(ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, 0, 1)); anims.add(ObjectAnimator.ofFloat(altTextClose, View.ALPHA, 0, 1)); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+altWrapPadding[0], altTextWrapper.getLeft())); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+altWrapPadding[1], altTextWrapper.getTop())); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+v.getWidth()-altWrapPadding[2], altTextWrapper.getRight())); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+v.getHeight()-altWrapPadding[3], altTextWrapper.getBottom())); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+margins.leftMargin, altTextWrapper.getLeft())); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+margins.topMargin, altTextWrapper.getTop())); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+v.getWidth()-margins.rightMargin, altTextWrapper.getRight())); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+v.getHeight()-margins.bottomMargin, altTextWrapper.getBottom())); for(Animator a:anims) a.setDuration(300); @@ -265,15 +264,16 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{ btnL-=loc[0]; btnT-=loc[1]; + ViewGroup.MarginLayoutParams margins = (ViewGroup.MarginLayoutParams) altTextWrapper.getLayoutParams(); ArrayList anims=new ArrayList<>(); anims.add(ObjectAnimator.ofFloat(altTextButton, View.ALPHA, 1)); anims.add(ObjectAnimator.ofFloat(noAltTextButton, View.ALPHA, 1)); anims.add(ObjectAnimator.ofFloat(altTextScroller, View.ALPHA, 0)); anims.add(ObjectAnimator.ofFloat(altTextClose, View.ALPHA, 0)); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+altWrapPadding[0])); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+altWrapPadding[1])); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+btn.getWidth()-altWrapPadding[2])); - anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+btn.getHeight()-altWrapPadding[3])); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "left", btnL+margins.leftMargin)); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "top", btnT+margins.topMargin)); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "right", btnL+btn.getWidth()-margins.rightMargin)); + anims.add(ObjectAnimator.ofInt(altTextWrapper, "bottom", btnT+btn.getHeight()-margins.bottomMargin)); for(Animator a:anims) a.setDuration(300); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java index db0d9653f..c1d293583 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/MediaAttachmentViewController.java @@ -19,7 +19,6 @@ public class MediaAttachmentViewController{ public final MediaGridStatusDisplayItem.GridItemType type; public final ImageView photo; public final View altButton, noAltButton, btnsWrap; - public static int[] altWrapPadding = null; private BlurhashCrossfadeDrawable crossfadeDrawable=new BlurhashCrossfadeDrawable(); private final Context context; private boolean didClear; @@ -37,9 +36,6 @@ public class MediaAttachmentViewController{ btnsWrap=view.findViewById(R.id.alt_badges); this.type=type; this.context=context; - if (altWrapPadding == null) { - altWrapPadding = new int[] { btnsWrap.getPaddingLeft(), btnsWrap.getPaddingTop(), btnsWrap.getPaddingRight(), btnsWrap.getPaddingBottom() }; - } } public void bind(Attachment attachment, Status status){ diff --git a/mastodon/src/main/res/color/m3_on_surface_overlay.xml b/mastodon/src/main/res/color/m3_on_surface_overlay.xml new file mode 100644 index 000000000..a01db2828 --- /dev/null +++ b/mastodon/src/main/res/color/m3_on_surface_overlay.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/bg_bottom_sheet.xml b/mastodon/src/main/res/drawable/bg_bottom_sheet.xml index e5b3d3ea3..bf1a899ef 100644 --- a/mastodon/src/main/res/drawable/bg_bottom_sheet.xml +++ b/mastodon/src/main/res/drawable/bg_bottom_sheet.xml @@ -2,8 +2,14 @@ - - + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/bg_bottom_sheet_handle.xml b/mastodon/src/main/res/drawable/bg_bottom_sheet_handle.xml index 199c9cabf..28dc9cb56 100644 --- a/mastodon/src/main/res/drawable/bg_bottom_sheet_handle.xml +++ b/mastodon/src/main/res/drawable/bg_bottom_sheet_handle.xml @@ -1,8 +1,8 @@ - - - + + + diff --git a/mastodon/src/main/res/drawable/bg_button_m3_outlined.xml b/mastodon/src/main/res/drawable/bg_button_m3_outlined.xml new file mode 100644 index 000000000..80709f7e1 --- /dev/null +++ b/mastodon/src/main/res/drawable/bg_button_m3_outlined.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/bg_button_m3_outlined_white.xml b/mastodon/src/main/res/drawable/bg_button_m3_outlined_white.xml new file mode 100644 index 000000000..99a5afc4b --- /dev/null +++ b/mastodon/src/main/res/drawable/bg_button_m3_outlined_white.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/bg_button_m3_text_white.xml b/mastodon/src/main/res/drawable/bg_button_m3_text_white.xml new file mode 100644 index 000000000..24dc754fd --- /dev/null +++ b/mastodon/src/main/res/drawable/bg_button_m3_text_white.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/drawable/splash_logo.xml b/mastodon/src/main/res/drawable/splash_logo.xml new file mode 100644 index 000000000..71195de3f --- /dev/null +++ b/mastodon/src/main/res/drawable/splash_logo.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/mastodon/src/main/res/layout/alt_badge.xml b/mastodon/src/main/res/layout/alt_badge.xml index 955f8f5cb..d4996e868 100644 --- a/mastodon/src/main/res/layout/alt_badge.xml +++ b/mastodon/src/main/res/layout/alt_badge.xml @@ -27,7 +27,7 @@ android:gravity="center" android:includeFontPadding="false" android:paddingHorizontal="5dp" - android:paddingVertical="1dp" + android:paddingVertical="2dp" android:background="@drawable/bg_image_alt_overlay" android:text="@string/sk_alt_button"/> diff --git a/mastodon/src/main/res/layout/display_item_header.xml b/mastodon/src/main/res/layout/display_item_header.xml index f0c12238b..c46261022 100644 --- a/mastodon/src/main/res/layout/display_item_header.xml +++ b/mastodon/src/main/res/layout/display_item_header.xml @@ -3,7 +3,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="13dp" android:paddingEnd="4dp" android:paddingStart="16dp"> @@ -11,6 +10,7 @@ android:id="@+id/more" android:layout_width="36dp" android:layout_height="36dp" + android:layout_marginTop="13dp" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:background="?android:actionBarItemBackground" @@ -23,6 +23,7 @@ android:id="@+id/delete_notification" android:layout_width="36dp" android:layout_height="36dp" + android:layout_marginTop="13dp" android:layout_toStartOf="@id/more" android:visibility="gone" android:background="?android:actionBarItemBackground" @@ -36,6 +37,7 @@ android:id="@+id/visibility" android:layout_width="36dp" android:layout_height="36dp" + android:layout_marginTop="13dp" android:layout_toStartOf="@id/delete_notification" android:background="?android:actionBarItemBackground" android:scaleType="center" @@ -46,6 +48,7 @@ android:id="@+id/collapse_btn" android:layout_width="36dp" android:layout_height="36dp" + android:layout_marginTop="13dp" android:layout_toStartOf="@id/visibility" android:background="?android:actionBarItemBackground" android:visibility="gone" @@ -70,6 +73,7 @@ android:id="@+id/unread_indicator" android:layout_width="36dp" android:layout_height="36dp" + android:layout_marginTop="13dp" android:layout_toStartOf="@id/collapse_btn" android:visibility="gone" android:tint="?android:colorAccent" @@ -83,18 +87,16 @@ android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginEnd="12dp" - android:layout_marginTop="3dp" /> + android:layout_marginTop="16dp" /> + android:layout_above="@+id/username_wrap"> @@ -81,6 +80,7 @@ android:id="@+id/self_avatar" android:layout_width="46sp" android:layout_height="46sp" + android:layout_marginTop="16dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginEnd="12dp" /> @@ -90,8 +90,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toEndOf="@id/self_avatar" - android:paddingTop="3sp" - android:minHeight="24sp" + android:layout_above="@+id/self_username" android:ellipsize="end" android:singleLine="true" android:textAppearance="@style/m3_title_medium" @@ -103,7 +102,7 @@ android:layout_height="wrap_content" android:layout_marginStart="8sp" android:layout_toEndOf="@id/self_name" - android:paddingTop="3sp" + android:layout_above="@id/self_username" android:ellipsize="end" android:fontFamily="sans-serif" android:singleLine="true" @@ -112,14 +111,15 @@ tools:text="@string/sk_local_only" /> diff --git a/mastodon/src/main/res/layout/fragment_splash.xml b/mastodon/src/main/res/layout/fragment_splash.xml index 196c303fa..7fcbe1f7a 100644 --- a/mastodon/src/main/res/layout/fragment_splash.xml +++ b/mastodon/src/main/res/layout/fragment_splash.xml @@ -5,7 +5,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" - android:clipToPadding="false"> + android:clipToPadding="false" + android:theme="@style/Theme.Mastodon.Dark.SplashFragment"> @@ -58,7 +60,8 @@ android:layout_width="197.2dp" android:layout_height="153.61dp" android:layout_gravity="top|left" - android:layout_marginTop="294dp" + android:layout_marginTop="252dp" + android:layout_marginLeft="-44dp" android:importantForAccessibility="no" android:src="@drawable/splash_art_layer2"/> @@ -67,7 +70,8 @@ android:layout_width="400dp" android:layout_height="346dp" android:layout_gravity="top|left" - android:layout_marginTop="294dp" + android:layout_marginTop="240dp" + android:layout_marginLeft="-20dp" android:importantForAccessibility="no" android:src="@drawable/splash_art_layer3"/> @@ -86,61 +90,108 @@ android:layout_height="match_parent" android:clipToPadding="false" android:orientation="vertical"> + + - - - - - - - - - - - - - - -