60 {
61 super.onCreate(savedInstanceState);
62 binding = HomeBinding.inflate(getLayoutInflater());
63 setContentView(binding.getRoot());
64
65 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
66 checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
67 PackageManager.PERMISSION_GRANTED)
68 {
69 requestPermissions(new String[] { Manifest.permission.POST_NOTIFICATIONS }, 0);
70 }
71
72 externalDisplayManager = new ExternalDisplayManager(this);
73
74 long heapSize = Runtime.getRuntime().maxMemory();
75 Log.i(TAG, "Max HeapSize: " + heapSize);
76 Log.i(TAG, "App data folder: " + getFilesDir().toString());
77
78
79 Intent caller = getIntent();
80 Uri callParameter = caller.getData();
81
82 if (Intent.ACTION_VIEW.equals(caller.getAction()) && callParameter != null)
83 {
84 String refStr = ConnectionReference.getFileReference(callParameter.toString());
85 Bundle bundle = new Bundle();
86 bundle.putString(BookmarkActivity.PARAM_CONNECTION_REFERENCE, refStr);
87
88 Intent bookmarkIntent =
89 new Intent(this.getApplicationContext(), BookmarkActivity.class);
90 bookmarkIntent.putExtras(bundle);
91 startActivity(bookmarkIntent);
92 }
93
94 viewModel = new ViewModelProvider(this).get(HomeViewModel.class);
95
96 bookmarkListAdapter = new BookmarkListAdapter();
97 bookmarkListAdapter.setCallbacks(new BookmarkListAdapter.Callbacks() {
98 @Override public void onItemClick(String refStr)
99 {
100 if (ConnectionReference.isBookmarkReference(refStr) ||
101 ConnectionReference.isHostnameReference(refStr))
102 {
103 externalDisplayManager.launchSessionWithDisplayPicker(refStr);
104
105 if (searchView != null)
106 {
107 searchView.setQuery("", false);
108 searchView.setIconified(true);
109 }
110 if (searchMenuItem != null)
111 {
112 searchMenuItem.collapseActionView();
113 }
114 viewModel.loadBookmarks("");
115 }
116 }
117
118 @Override public void onDelete(long id)
119 {
120 viewModel.deleteBookmark(id);
121 }
122
123 @Override public void onExport(BookmarkBase bookmark)
124 {
125 shareRdpFile(bookmark);
126 }
127 });
128
129 binding.recyclerViewBookmarks.setLayoutManager(new LinearLayoutManager(this));
130 binding.recyclerViewBookmarks.setAdapter(bookmarkListAdapter);
131
132 viewModel.getBookmarks().observe(this,
133 bookmarks -> bookmarkListAdapter.setItems(bookmarks));
134
135
136 if (savedInstanceState != null)
137 {
138 String query = savedInstanceState.getString(PARAM_SEARCH_QUERY);
139 if (query != null && !query.isEmpty() && viewModel.getCurrentQuery().isEmpty())
140 {
141 viewModel.loadBookmarks(query);
142 }
143 }
144
145 getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
146 @Override public void handleOnBackPressed()
147 {
148 if (ApplicationSettingsActivity.getAskOnExit(HomeActivity.this))
149 {
150 new AlertDialog.Builder(HomeActivity.this)
151 .setTitle(R.string.dlg_title_exit)
152 .setMessage(R.string.dlg_msg_exit)
153 .setPositiveButton(R.string.yes, (dialog, which) -> finish())
154 .setNegativeButton(R.string.no, (dialog, which) -> dialog.dismiss())
155 .show();
156 }
157 else
158 {
159 finish();
160 }
161 }
162 });
163 }