37
import android.util.Log;
import android.view.View;
import android.webkit.MimeTypeMap;
В ҚОСЫШАСЫ
import android.widget.Button;
import android.widget.LinearLayout;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class SearchActivity extends AppCompatActivity {
private final String TAG = SearchActivity.class.getSimpleName();
private RecyclerView recyclerView;
private TitleGroupAdapter mAdapter;
private List
38
//alert dialog
if(!mAdapter.getSelectedItems().isEmpty()) {
В ҚОСЫШАСЫ
AlertDialog.Builder builder = new AlertDialog.Builder(SearchActivity.this);
builder.setTitle("Удалить?");
builder.setPositiveButton(android.R.string.ok, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do something
for (int i = 0; i < mAdapter.getSelectedItems().size(); i++) {
//Log.e(TAG, "onClick: " + ((Title)
mAdapter.getSelectedItems().get(i)).getLink());
String linkDeleted = ((Title)
mAdapter.getSelectedItems().get(i)).getLink();
List
39
}
В ҚОСЫШАСЫ
});
// progress bar
linlaHeaderProgress.setVisibility(View.VISIBLE);
try {
messageDigest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
startSearchDuplicateFiles();
}
}).start();
}
public void startSearchDuplicateFiles() {
//search duplicate files
File dir = Environment.getExternalStorageDirectory();
findDuplicateFiles(lists, dir);
//show duplicate files
boolean isAudio = getIntent().getExtras().getBoolean("isAudio");
boolean isVideo = getIntent().getExtras().getBoolean("isVideo");
boolean isImage = getIntent().getExtras().getBoolean("isImage");
boolean isDocs = getIntent().getExtras().getBoolean("isDocs");
boolean isFullScan = getIntent().getExtras().getBoolean("isFullScan");
int iter = 1;
for (List list : lists.values()) {
if (list.size() > 1) {
String type_of_file = "";
for (String file : list) {
type_of_file = getMimeType(file);
}
if (type_of_file != null) {
//checking for audio
if (type_of_file.contains("audio") && isAudio) {
//Log.e(TAG, "------------------------------------------");
Group group = new Group(iter);
groupTitleList.add(group);
mAdapter.setTitleGroupFeed(groupTitleList);
for (String file : list) {
40
В ҚОСЫШАСЫ
String stitle = file.substring(file.lastIndexOf('/') + 1);
//Log.e(TAG, "onCreate: " + getMimeType(file) + stitle);
Title t = new Title(stitle, file);
groupTitleList.add(t);
mAdapter.setTitleGroupFeed(groupTitleList);
}
iter++;
}
//checking for video
if (type_of_file.contains("video") && isVideo) {
//Log.e(TAG, "------------------------------------------");
Group group = new Group(iter);
groupTitleList.add(group);
mAdapter.setTitleGroupFeed(groupTitleList);
for (String file : list) {
String stitle = file.substring(file.lastIndexOf('/') + 1);
//Log.e(TAG, "onCreate: " + getMimeType(file) + stitle);
Title t = new Title(stitle, file);
groupTitleList.add(t);
mAdapter.setTitleGroupFeed(groupTitleList);
}
iter++;
}
//checking for image
if (type_of_file.contains("image") && isImage) {
//Log.e(TAG, "------------------------------------------");
Group group = new Group(iter);
groupTitleList.add(group);
mAdapter.setTitleGroupFeed(groupTitleList);
for (String file : list) {
String stitle = file.substring(file.lastIndexOf('/') + 1);
//Log.e(TAG, "onCreate: " + getMimeType(file) + stitle);
Title t = new Title(stitle, file);
groupTitleList.add(t);
mAdapter.setTitleGroupFeed(groupTitleList);
}
iter++;
}
//checking for docs
if ((type_of_file.contains("text") ||
type_of_file.contains("application")) && isDocs) {
В ҚОСЫШАСЫ
41
//Log.e(TAG, "------------------------------------------");
Group group = new Group(iter);
groupTitleList.add(group);
mAdapter.setTitleGroupFeed(groupTitleList);
for (String file : list) {
String stitle = file.substring(file.lastIndexOf('/') + 1);
//Log.e(TAG, "onCreate: " + getMimeType(file) + stitle);
Title t = new Title(stitle, file);
groupTitleList.add(t);
mAdapter.setTitleGroupFeed(groupTitleList);
}
iter++;
}
}
if (isFullScan) {
//checking for full scan
//Log.e(TAG, "------------------------------------------");
Group group = new Group(iter);
groupTitleList.add(group);
mAdapter.setTitleGroupFeed(groupTitleList);
for (String file : list) {
String stitle = file.substring(file.lastIndexOf('/') + 1);
//Log.e(TAG, "onCreate: " + getMimeType(file) + stitle);
Title t = new Title(stitle, file);
groupTitleList.add(t);
mAdapter.setTitleGroupFeed(groupTitleList);
}
iter++;
}
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
linlaHeaderProgress.setVisibility(View.GONE);
}
});
}
public static String getMimeType(String url) {
String type = null;
В ҚОСЫШАСЫ
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
42
if (extension != null) {
type
=
MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;
}
public void findDuplicateFiles(Map> filesList, File
directory) {
for (File dirChild : directory.listFiles()) {
if (dirChild.isDirectory()) {
findDuplicateFiles(filesList, dirChild);
} else {
try {
FileInputStream fileInput = new FileInputStream(dirChild);
if (dirChild.length() > 1073741000)
return;
byte fileData[] = new byte[(int) dirChild.length()];
fileInput.read(fileData);
fileInput.close();
String uniqueFileHash = new BigInteger(1,
messageDigest.digest(fileData)).toString(16);
List identicalList = filesList.get(uniqueFileHash);
if (identicalList == null) {
identicalList = new LinkedList<>();
}
identicalList.add(dirChild.getAbsolutePath());
filesList.put(uniqueFileHash, identicalList);
} catch (IOException e) {
throw new RuntimeException("cannot read file " +
dirChild.getAbsolutePath(), e);
}
}
}
}
}
43
ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖƏНЕ ҒЫЛЫМ МИНИСТРЛІГІ
Сəтбаев университеті
Ғылыми жетекшінің пікірі
Дипломдық жұмыс
Құлманов Дəулетхан Полатұлы
5B070300 – Ақпараттық жүйелер
Тақырыбы: Қайталанатын файлдарды табуға арналған мобильді қосымша
жасау
Бұл дипломдық жұмыс өзінің логикалық құрылымымен ерекшеленген.
Түсіндірме жобаның құрамы кіріспеден, 3 бөлімнен, қорытындыдан,
əдебиеттер тізімінен жəне қосымшадан тұрады.
Менің пікірімше, диплом жобалаушы алдына қойылған тапсырманы
толығымен орындады жəне кейінгі технологияларын меңгергендігін көрсетті.
Жалпы дипломдық жоба профессионалдық деңгейде орындалған.
Түсіндірме жазба сауатты бейнеленген, жоба бойынша барлық қажетті
ақпараттар бар.
Кемшілік ретінде кейбір шағын стилистикалық қателерді атап кетуге
болады.
Жоғарыда айтылғандарға байланысты, дипломдық жұмыс 5B070300 –
«Ақпараттық жүйелер» мамандығының бітіру жұмыстарына қойылатын
талаптарына сəйкес жəне дипломдық жұмыс қорғауға жіберіле алады, ал оның
авторы Құлманов Дəулетхан Полатұлы бакалавр академиялық дəрежесін алуға
лайықты деп есептеймін.
Ғылыми жетекші
Лектор Зиро А.А.
«24» мая 2021 ж.