Skip to content

Commit

Permalink
Merge pull request #28 from FazziCLAY/polish
Browse files Browse the repository at this point in the history
Polish
  • Loading branch information
FazziCLAY authored Mar 11, 2023
2 parents 19cf0cc + ae934d7 commit 2cdb889
Show file tree
Hide file tree
Showing 43 changed files with 716 additions and 651 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ android {
defaultConfig {
// =====
var isDev = false
var verBuild = 108
var verName = "1.0.3"
var verBuild = 110
var verName = "1.0.4"
// =====

applicationId "com.fazziclay.opentoday" + (isDev ? ".dev" : "")
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<application
android:name="com.fazziclay.opentoday.app.App"
android:allowBackup="true"
Expand Down
10 changes: 9 additions & 1 deletion app/src/main/assets/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
OwO
# Changelog v110 1.0.4

Optimize findFragmentsInParents (recursive)
Optimize notifications for android 13+
Large layouts optimize
Toolbar optimize
Add 'Selected' checkbox to ItemEditor
Optimize ImportFragment (no render text if is by autoRun initiative)
Icon on ItemsEditor FilterGroupItem-mode changed
15 changes: 14 additions & 1 deletion app/src/main/java/com/fazziclay/opentoday/app/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Build;
import android.util.Log;
Expand Down Expand Up @@ -88,8 +89,9 @@ public static App get() {
@AppInitIfNeed private SettingsManager settingsManager = null;
@AppInitIfNeed private ColorHistoryManager colorHistoryManager = null;
@AppInitIfNeed private Telemetry telemetry = null;
private PinCodeManager pinCodeManager = null;
private PinCodeManager pinCodeManager;
@AppInitIfNeed private License[] openSourceLicenses = null;
@AppInitIfNeed private ClipboardManager clipboardManager = null;
private final List<FeatureFlag> featureFlags = new ArrayList<>(App.DEBUG ? Arrays.asList(
FeatureFlag.ITEM_DEBUG_TICK_COUNTER,
//FeatureFlag.ITEM_EDITOR_SHOW_COPY_ID_BUTTON,
Expand Down Expand Up @@ -308,6 +310,12 @@ private void preCheckColorHistoryManager() {
}
}

private void preCheckClipboardManager() {
if (clipboardManager == null) {
clipboardManager = getSystemService(ClipboardManager.class);
}
}

private void preCheckInstanceId() {
if (instanceId == null) {
instanceId = parseInstanceId();
Expand Down Expand Up @@ -343,6 +351,11 @@ public License[] getOpenSourcesLicenses() {
return this.openSourceLicenses;
}

public ClipboardManager getClipboardManager() {
preCheckClipboardManager();
return this.clipboardManager;
}

public PinCodeManager getPinCodeManager() {
return pinCodeManager;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,18 @@ public List<Tab> getTabs() {
return tabs;
}

public boolean isOneTabMode() {
return getTabsCount() == 1;
}

public int getTabsCount() {
return tabs.size();
}

public Tab getTabAt(int i) {
return tabs.get(i);
}

public int getTabPosition(UUID tabId) {
Tab tab = getTab(tabId);
if (tab == null) {
Expand Down Expand Up @@ -216,7 +228,7 @@ public void addTab(@NonNull Tab tab) {
}

public void deleteTab(Tab tab) {
if (this.tabs.size() == 1) {
if (getTabsCount() == 1) {
throw new SecurityException("Not allowed one tab (after delete tabs count == 0)");
}
this.tabs.remove(tab);
Expand Down Expand Up @@ -286,6 +298,10 @@ public CallbackStorage<OnSelectionChanged> getOnSelectionUpdated() {
return onSelectionUpdated;
}

public boolean isSelectionEmpty() {
return selections.isEmpty();
}

public Selection[] getSelections() {
return selections.toArray(new Selection[0]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,12 @@ public static void checkAttached(Item item) {
throw new RuntimeException("items already attached. Use item.delete() to detach");
}
}

public static UUID getId(Object o) {
if (o instanceof ID) {
ID id = (ID) o;
return id.getId();
}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -142,5 +142,10 @@ public void save(Item item) {
public void updateUi(Item item) {
SimpleItemsStorage.this.onUpdateCallbacks.run((callbackStorage, callback) -> callback.onUpdated(item, getItemPosition(item)));
}

@Override
public ItemsStorage getParentItemStorage(Item item) {
return SimpleItemsStorage.this;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -622,5 +622,10 @@ public void updateUi(Item item) {
itemStorageUpdateCallbacks.run((callbackStorage, callback) -> callback.onUpdated(item, getItemPosition(item)));
FilterGroupItem.this.visibleChanged();
}

@Override
public ItemsStorage getParentItemStorage(Item item) {
return FilterGroupItem.this;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import com.fazziclay.opentoday.app.TickSession;
import com.fazziclay.opentoday.app.items.ID;
import com.fazziclay.opentoday.app.items.ItemsStorage;
import com.fazziclay.opentoday.app.items.notification.ItemNotification;
import com.fazziclay.opentoday.app.items.notification.ItemNotificationIEUtil;
import com.fazziclay.opentoday.app.items.notification.ItemNotificationUtil;
Expand Down Expand Up @@ -171,4 +172,10 @@ public void setController(@Nullable ItemController controller) {
@Setter public void setMinimize(boolean minimize) { this.minimize = minimize; }

@Getter @NonNull public List<ItemNotification> getNotifications() { return notifications; }
@Getter public ItemsStorage getParentItemStorage() {
if (isAttached()) {
return controller.getParentItemStorage(this);
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.fazziclay.opentoday.app.items.item;

import com.fazziclay.opentoday.app.items.ItemsStorage;

public abstract class ItemController {
public abstract void delete(Item item);
public abstract void save(Item item);
public abstract void updateUi(Item item);
public abstract ItemsStorage getParentItemStorage(Item item);
}
115 changes: 106 additions & 9 deletions app/src/main/java/com/fazziclay/opentoday/gui/UI.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,133 @@
package com.fazziclay.opentoday.gui;

import static com.fazziclay.opentoday.util.InlineUtil.viewClick;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.fazziclay.opentoday.R;
import com.fazziclay.opentoday.app.App;
import com.fazziclay.opentoday.app.FeatureFlag;
import com.fazziclay.opentoday.app.receiver.ItemsTickReceiver;
import com.fazziclay.opentoday.gui.fragment.MainRootFragment;
import com.fazziclay.opentoday.gui.interfaces.NavigationHost;

import java.util.UUID;

public class UI {
@Nullable
public static <T extends Fragment> T findFragmentInParents(@NonNull final Fragment fragment, @NonNull final Class<T> find) {
if (fragment == null) throw new NullPointerException("Fragment is null!");
if (find == null) throw new NullPointerException("find is null!");
if (fragment.getParentFragment() == null) {
return null;
}
if (find == null) throw new NullPointerException("Find is null!");

Fragment parent = fragment.getParentFragment();
if (parent.getClass() == find) {
return (T) parent;
} else {
return findFragmentInParents(fragment.getParentFragment(), find);
while (true) {
if (parent == null) {
return null;
}
if (parent.getClass() == find) {
return (T) parent;
}
parent = parent.getParentFragment();
}
}

public static void rootBack(@NonNull final Fragment fragment) {
if (fragment == null) throw new NullPointerException("Fragment is null!");
final MainRootFragment host = UI.findFragmentInParents(fragment, MainRootFragment.class);
if (host == null) throw new RuntimeException("fragment is not in MainRootFragment tree!");
if (host == null) throw new RuntimeException("Fragment is not contains MainRootFragment in parents!");
host.popBackStack();
}

public static void navigate(@NonNull final NavigationHost navigationHost, @NonNull final Fragment fragment, final boolean addToBackStack) {
navigationHost.navigate(fragment, addToBackStack);
}

public static class Debug {
public static void showPersonalTickDialog(Context context) {
EditText view = new EditText(context);
new AlertDialog.Builder(context)
.setView(view)
.setPositiveButton("TICK", (dfsd, fdsg) -> {
// TODO: 3/10/23 review
try {
UUID id = UUID.fromString(view.getText().toString());
context.sendBroadcast(new Intent(context, ItemsTickReceiver.class).putExtra(ItemsTickReceiver.EXTRA_PERSONAL_TICK, new String[]{id.toString()}).putExtra("debugMessage", "Debug personal tick is work!"));
} catch (Exception e) {
Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show();
}
})
.show();
}

public static void showCrashWithMessageDialog(final Context context, final String exceptionMessagePattern) {
Toast.makeText(context, R.string.manuallyCrash_crash, Toast.LENGTH_SHORT).show();
EditText message = new EditText(context);
message.setHint(R.string.manuallyCrash_dialog_inputHint);
Dialog dialog = new AlertDialog.Builder(context)
.setTitle(R.string.manuallyCrash_dialog_title)
.setView(message)
.setMessage(R.string.manuallyCrash_dialog_message)
.setPositiveButton(R.string.manuallyCrash_dialog_apply, (var1, var2) -> {
throw new RuntimeException(String.format(exceptionMessagePattern, message.getText().toString()));
})
.setNegativeButton(R.string.manuallyCrash_dialog_cancel, null)
.create();
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}

public static void showFeatureFlagsDialog(final App app, final Context context) {
LinearLayout view = new LinearLayout(context);
view.setOrientation(LinearLayout.VERTICAL);

for (FeatureFlag featureFlag : FeatureFlag.values()) {
CheckBox c = new CheckBox(context);
c.setText(featureFlag.name());
c.setChecked(app.isFeatureFlag(featureFlag));
viewClick(c, () -> {
boolean is = c.isChecked();
if (is) {
if (!app.isFeatureFlag(featureFlag)) {
app.getFeatureFlags().add(featureFlag);
}
} else {
if (app.isFeatureFlag(featureFlag)) {
app.getFeatureFlags().remove(featureFlag);
}
}
});

TextView textView = new TextView(context);
textView.setText(featureFlag.getDescription());
textView.setTextSize(11);
textView.setPadding(60, 0, 0, 0);

view.addView(c);
view.addView(textView);
}

ScrollView scrollView = new ScrollView(context);
scrollView.addView(view);

Dialog dialog = new AlertDialog.Builder(context)
.setView(scrollView)
.setTitle("DEBUG: FeatureFlags")
.setNegativeButton(R.string.abc_cancel, null)
.create();
dialog.show();
}
}
}
34 changes: 0 additions & 34 deletions app/src/main/java/com/fazziclay/opentoday/gui/UITickService.java

This file was deleted.

Loading

0 comments on commit 2cdb889

Please sign in to comment.