// // NasSearchAppViewController.m // 双子星云手机 // // Created by xd h on 2025/6/17. // #import "NasSearchAppViewController.h" #import "searchBarSecondTypeView.h" #import "searchListModel.h" #import "couldPhoneFileListModel.h" #import "downloadManager.h" #import "uploadFileRecordViewController.h" #import "UIScrollView+EmptyDataSet.h" #import "downLoadPreViewCell.h" #import "editTypeHeadView.h" #import "editTypeBottomView.h" #import "editShareView.h" #import "netWorkManager.h" #import "queryShareModel.h" #import "editAPPBottomView.h" @interface NasSearchAppViewController () { BOOL canShareType; BOOL canInstallTVType; } @property (nonatomic, strong) UITableView *tableView; @property(nonatomic,assign) BOOL isEditType; @property(nonatomic,strong) editTypeHeadView*curEditTypeHeadView; @property(nonatomic,strong) editAPPBottomView*curEditTypeBottomView; @property(nonatomic,strong) searchBarSecondTypeView* searchBarSecondTypeV;// @property (nonatomic, strong) NSMutableArray*didSelectListArr;//选中的数据 @property (nonatomic, strong) NSMutableArray*curSearchListArr;//搜索(过滤)的数据 @property (nonatomic, copy) NSString *searchKeyWord;//搜索关键字 @property (nonatomic, strong) UIView *tableViewHead; @property (nonatomic, strong) UILabel *tableViewHeadLabel; @end @implementation NasSearchAppViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self.toolBar setHidden:YES]; [self.navigationBar setHidden:YES]; [self.navBarBGView setHidden:NO]; self.navBarBGView.backgroundColor = [UIColor whiteColor]; [self.view setBackgroundColor:[UIColor whiteColor]]; [self drawAnyView]; _didSelectListArr = [NSMutableArray new]; _curSearchListArr = [NSMutableArray new]; //数据埋点 //[[netWorkManager shareInstance] DataEmbeddingPointBy:2 withEventValue:@"Video"]; } - (void)drawAnyView{ _searchBarSecondTypeV = [[searchBarSecondTypeView alloc] init]; [self.view addSubview:_searchBarSecondTypeV]; [_searchBarSecondTypeV mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.backBtn.mas_centerY).offset(0); make.height.mas_equalTo(32.0); make.left.mas_equalTo(52.0); //make.right.mas_equalTo(-48.0); make.right.mas_equalTo(0.0); }]; KWeakSelf _searchBarSecondTypeV.didClickSearchFun = ^(NSString * _Nonnull searchText) { //HLog(@"1111:%@",searchText) weakSelf.searchKeyWord = searchText; [weakSelf.curSearchListArr removeAllObjects]; [weakSelf searchListDataFun]; }; _curEditTypeHeadView = [[editTypeHeadView alloc] init]; _curEditTypeHeadView.hidden = YES; [self.navBarBGView addSubview:_curEditTypeHeadView]; [_curEditTypeHeadView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.bottom.mas_equalTo(0); make.height.mas_equalTo(NAVIHEIGHT - AdaptNaviHeight); }]; #pragma mark 编辑状态的 取消 和全选按钮 响应事件 _curEditTypeHeadView.didClickButtonFun = ^(NSInteger tag) { if(tag==1){ [weakSelf userCancelEditTypeFun]; } }; _curEditTypeHeadView.didClickSelectAllFun = ^(UIButton * _Nonnull but) { [weakSelf didClickSelectAllButton:but]; }; _curEditTypeBottomView = [[editAPPBottomView alloc] init]; _curEditTypeBottomView.hidden = YES; _curEditTypeBottomView.isCanDeleteType = _isCanDeleteType; [self.view addSubview:_curEditTypeBottomView]; [_curEditTypeBottomView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.bottom.mas_equalTo(0); make.height.mas_equalTo(60 + AdaptTabHeight); }]; #pragma mark 编辑状态的 下载 分享 删除 响应事件 _curEditTypeBottomView.didClickButtonFun = ^(NSInteger tag) { if(tag==1){ [weakSelf gotoDownLoadFileFun]; } else if(tag==2){ [weakSelf gotoShareViewFun]; } else if(tag==3){ [weakSelf showDeleteAlearViewFun]; } }; [self.view addSubview:self.tableView]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); //make.bottom.mas_equalTo(-(safeArea)); make.bottom.mas_equalTo(0); make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f); }]; self.tableView.hidden = YES; _tableViewHead = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, 30)]; _tableViewHead.backgroundColor = [UIColor whiteColor]; //self.tableView.tableHeaderView = _tableViewHead; _tableViewHeadLabel = [[UILabel alloc] init]; _tableViewHeadLabel.textColor = [UIColor hwColor:@"#0A132B"]; _tableViewHeadLabel.font = [UIFont systemFontOfSize:12.0]; _tableViewHeadLabel.text = NSLocalizedString(@"Search_Total_result",nil); [_tableViewHead addSubview:_tableViewHeadLabel]; [_tableViewHeadLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(15.0); make.right.mas_equalTo(0.0); make.top.mas_equalTo(0.0); make.bottom.mas_equalTo(0.0); }]; } #pragma mark - 懒加载 - (UITableView *)tableView{ if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, SCREEN_H - TABBARHEIGHT) style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.showsVerticalScrollIndicator = NO; _tableView.showsHorizontalScrollIndicator = NO; // _tableView.contentInset = UIEdgeInsetsMake(-H_STATE_BAR, 0, 0, 0); [_tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)]; [_tableView setSeparatorColor:[UIColor clearColor]]; [_tableView setBackgroundColor:[UIColor clearColor]]; [_tableView setTableFooterView:[UIView new]]; [_tableView setBounces:YES]; if (@available(iOS 15.0, *)) { _tableView.sectionHeaderTopPadding = 0; } //空数据引入第三方开源处理 _tableView.emptyDataSetSource = self; _tableView.emptyDataSetDelegate = self; } return _tableView; } #pragma mark - 列表委托 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _curSearchListArr.count; } - (downLoadPreViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ __block NSInteger row = indexPath.row; static NSString *identifier = @"downLoadPreViewCell"; downLoadPreViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier]; cell.selectionStyle = UITableViewCellSelectionStyleNone; if (!cell){ cell = [[downLoadPreViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]; [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; [cell setBackgroundColor:[UIColor clearColor]]; [cell setAccessoryType:(UITableViewCellAccessoryNone)]; [cell.bgViewLayer removeFromSuperlayer]; [cell.titleLabel2 setHidden:NO]; [cell.rightImage setHidden:YES]; [cell.lineView setHidden:YES]; [cell.checkButton setHidden:NO]; } if(row < _curSearchListArr.count){ getInstalledAppModel* dataModel = _curSearchListArr[row]; cell.curGetInstalledAppMod = dataModel; KWeakSelf cell.didClickSwitch = ^(BOOL SwitchOn) { [weakSelf userCheckFilePreviewByRow:row]; }; } return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 70; } #pragma mark 空数据 - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { NSString *imageName = @"common_no_data_pic"; return [UIImage imageNamed:imageName]; } - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *text = NSLocalizedString(@"Search_nodata_tip",nil); NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:16.0f], NSForegroundColorAttributeName: HW999999Color}; return [[NSAttributedString alloc] initWithString:text attributes:attributes]; } //调整图片位置 - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView { return -150; } #pragma mark 用户长按图片进入编辑 - (void)setViewEditTypeFun { _isEditType = YES; _searchBarSecondTypeV.hidden = YES; //[self.tableView reloadData]; _curEditTypeHeadView.hidden = NO; _curEditTypeBottomView.hidden = NO; [self RefreshAllUIFun]; } #pragma mark 用户取消编辑编辑 - (void)userCancelEditTypeFun { //数据还原 for (getInstalledAppModel*model in _didSelectListArr) { model.isSelectType = NO; } [_didSelectListArr removeAllObjects]; _isEditType = NO; _searchBarSecondTypeV.hidden = NO; //[self.tableView reloadData]; _curEditTypeHeadView.hidden = YES; _curEditTypeBottomView.hidden = YES; [self RefreshAllUIFun]; } #pragma mark 更新UI界面 - (void)RefreshAllUIFun { [self.tableView reloadData]; KWeakSelf [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); if(weakSelf.isEditType){ make.bottom.equalTo(weakSelf.curEditTypeBottomView.mas_top).offset(0.0); } else{ make.bottom.mas_equalTo(0); } make.top.equalTo(self.navBarBGView.mas_bottom).offset(10.f); }]; } - (void)userCheckFilePreviewByRow:(NSInteger)row { if(row < _curSearchListArr.count){ getInstalledAppModel* dataModel = _curSearchListArr[row]; if(dataModel.isSelectType){ [_didSelectListArr removeObject:dataModel]; } else{ [_didSelectListArr addObject:dataModel]; } dataModel.isSelectType = !dataModel.isSelectType; [self setEditTypeTitleFun]; } } - (void)didClickSelectAllButton:(UIButton*)button { //button.selected = !button.selected; [_didSelectListArr removeAllObjects]; for (getInstalledAppModel* dataModel in _curSearchListArr) { if(!button.selected){ dataModel.isSelectType = button.selected; } else{ [_didSelectListArr addObject:dataModel]; dataModel.isSelectType = button.selected; } } [self.tableView reloadData]; [self setEditTypeTitleFun]; } #pragma mark 设置选中标题 - (void)setEditTypeTitleFun { [_curEditTypeHeadView setTitleLabetextByNumbers:_didSelectListArr.count]; if(_didSelectListArr.count > 0){ [self setViewEditTypeFun]; if(_didSelectListArr.count == 1){ self.curEditTypeBottomView.isCanInstallToTVType = canInstallTVType; } else{ self.curEditTypeBottomView.isCanInstallToTVType = NO; } } else{ [self userCancelEditTypeFun]; } } #pragma mark 用户点击分享 - (void)gotoShareViewFun { if (_didSelectListArr.count > 5) { [[iToast makeText:NSLocalizedString(@"share_max_count_tip2",nil)] show]; return; } NSMutableArray *changeModelArr = [NSMutableArray new]; for (getInstalledAppModel* dataModel in _didSelectListArr) { NASFilePicDataArrModel *model = [NASFilePicDataArrModel new]; model.type = @"apk";//dataModel.fileType; model.path = dataModel.path; model.name = dataModel.name; if(dataModel.size > 0){ model.size = dataModel.size; } else{ model.size = dataModel.length; } model.time = dataModel.time; [changeModelArr addObject:model]; } editShareView *editShareV = [[editShareView alloc] init]; editShareV.didSelectListArr = changeModelArr; editShareV.shareFileType = @"3"; [self.view addSubview:editShareV]; [editShareV mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_equalTo(0); make.right.mas_equalTo(0); make.bottom.mas_equalTo(0); make.top.mas_equalTo(0); }]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self showDownloadTipFun]; if(!_curSearchListArr || _curSearchListArr.count == 0){ [self queryShareSwitchFunFun]; [self queryTVSwitchFunFun]; } } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; //[self removeNewIndicator]; [self removeNewIndicatorHaveStr]; } - (void)gotoDownloadloadFileRecordFun { uploadFileRecordViewController *vc = [uploadFileRecordViewController new]; [self.navigationController pushViewController:vc animated:YES]; vc.isDownloadingType = YES; //[vc gotoDownloadFile:_downloadFileBottomV.indexPathsForSelectedItems]; } - (void)showDownloadTipFun { BOOL didReadUploadTipType = [HWDataManager getBoolWithKey:Const_file_downLoad_need_read]; if(didReadUploadTipType){ return; } //KWeakSelf /*弹窗提示恢复出厂*/ ComontAlretViewController *nextVC = [[ComontAlretViewController alloc] initWithTiTle:@"" msg:NSLocalizedString(@"upload_download_need_read_msg",nil) imageStr:@"" cancelTitle:NSLocalizedString(@"guide_set_pwd_guide_know",nil) okTitle:@"" isOkBtnHighlight:NO didClickOk:^{ } didClickCancel:^{ [HWDataManager setBoolWithKey:Const_file_downLoad_need_read value:YES]; }]; nextVC.modalPresentationStyle = UIModalPresentationCustom; [self presentViewController:nextVC animated:YES completion:^{ nextVC.view.superview.backgroundColor = [UIColor clearColor]; }]; } - (void)didiClikRightButGotoTransferListFun:(UIButton*)but { uploadFileRecordViewController *vc = [uploadFileRecordViewController new]; [self.navigationController pushViewController:vc animated:YES]; } #pragma mark 获取文件数据 - (void)searchListDataFun { if(!_searchKeyWord || _searchKeyWord.length == 0){ return; } for (getInstalledAppModel* model in _totalAPPListModel.data) { if ([model.name containsString:_searchKeyWord]) { [_curSearchListArr addObject:model]; } } if (_curSearchListArr.count == 0) { self.tableView.tableHeaderView = nil; } else{ if(!self.tableView.tableHeaderView){ self.tableView.hidden = NO; self.tableView.tableHeaderView = _tableViewHead; } NSString *str = [[NSString alloc] initWithFormat:@"%@(%ld)",NSLocalizedString(@"Search_Total_result",nil),_curSearchListArr.count]; _tableViewHeadLabel.text = str; } [self RefreshAllUIFun]; } #pragma mark 文件下载 - (void)gotoDownLoadFileFun { if(_didSelectListArr.count == 0){ [[iToast makeText:@""] show]; return; } NSMutableArray *arr = [NSMutableArray new]; for (getInstalledAppModel *dataModel in _didSelectListArr) { couldPhoneFileModel* fileModel = [couldPhoneFileModel new]; fileModel.fileType = dataModel.fileType; fileModel.path = dataModel.path; fileModel.name = dataModel.name; if (dataModel.size) { fileModel.length = dataModel.size; } else{ fileModel.length = dataModel.length; } //fileModel.time = dataModel.duration; [arr addObject:fileModel]; } uploadFileRecordViewController *vc = [uploadFileRecordViewController new]; [self.navigationController pushViewController:vc animated:YES]; vc.isDownloadingType = YES; [vc gotoDownloadFile:arr]; } #pragma mark 删除图片 - (void)showDeleteAlearViewFun { NSString *titleStr = NSLocalizedString(@"delete_file_title_msg",nil); NSString *tipStr = NSLocalizedString(@"delete_file_tip_msg",nil); KWeakSelf ComontAlretViewController *curAlretVC= [[ComontAlretViewController alloc] initWithTiTle:titleStr msg:tipStr imageStr:@"" cancelTitle:NSLocalizedString(@"other_cancel",nil) okTitle:NSLocalizedString(@"other_confirm",nil) isOkBtnHighlight:YES didClickOk:^{ [weakSelf delFileListFun]; } didClickCancel:^{ }]; curAlretVC.modalPresentationStyle = UIModalPresentationCustom; [self presentViewController:curAlretVC animated:YES completion:^{ curAlretVC.view.superview.backgroundColor = [UIColor clearColor]; }]; } #pragma mark 删除文件数据 - (void)delFileListFun { NSMutableDictionary*paraDict = [NSMutableDictionary new]; NSMutableArray *pathArr = [NSMutableArray new]; for (getInstalledAppModel *dataModel in _didSelectListArr) { [pathArr addObject:dataModel.path]; } [paraDict setValue:pathArr forKey:@"path"]; [self showNewIndicatorWithCanBack:YES canTouch:NO]; //NSString*code = [[NSString alloc] initWithFormat:@"delFile?path=%@",paraDict[@"path"]]; //delFile?path=[/storage/emulated/0/Download/IMG_6464.HEIC] KWeakSelf //@"delFile" [[netWorkManager shareInstance] cloudPhonePostCallBackCode:@"delFile" Parameters:paraDict success:^(id _Nonnull responseObject) { [weakSelf removeNewIndicator]; SuperModel *model = [[SuperModel alloc] initWithDictionary:responseObject error:nil]; if(model && model.status == 0){ [[iToast makeText:NSLocalizedString(@"delete_file_suc_msg",nil)] show]; [weakSelf didDeleteSucFun]; } else{ } } failure:^(NSError * _Nonnull error) { [weakSelf removeNewIndicator]; }]; //数据埋点 [[netWorkManager shareInstance] DataEmbeddingPointBy:3 withEventValue:@"Video_delete"]; } #pragma mark 删除成功 - (void)didDeleteSucFun { //删除最近文件 //apk没最近文件 //2.删除已经获取到的网络数据 [self deleteNetDataByDeleteSucFun]; [_didSelectListArr removeAllObjects]; [self setEditTypeTitleFun]; } #pragma mark 删除成功后 对应删除原来获取的网络数据 - (void)deleteNetDataByDeleteSucFun { //1.处理传入的全部数据 NSMutableArray *afterFilterArr = [NSMutableArray new]; for (getInstalledAppModel *model in _totalAPPListModel.data) { if (!model.isSelectType) { [afterFilterArr addObject:model]; } } _totalAPPListModel.data = (NSArray*)afterFilterArr; //2.重新搜索 [_curSearchListArr removeAllObjects]; [self searchListDataFun]; } #pragma mark 获取分享开关 -(void)queryShareSwitchFunFun { NSMutableDictionary *paraDict = [NSMutableDictionary new]; [paraDict setValue:@3 forKey:@"type"]; KWeakSelf [[netWorkManager shareInstance] CommonGetWithCallBackCode:queryShareSwitchFun Parameters:paraDict success:^(id _Nonnull responseObject){ queryShareModel *queryShareMod = [[queryShareModel alloc] initWithDictionary:responseObject error:nil]; if(queryShareMod){ self->canShareType = queryShareMod.data.configValue; weakSelf.curEditTypeBottomView.isCanShareType = self->canShareType; } } failure:^(NSError * _Nonnull error) { }]; } #pragma mark 获取安装到TV开关 -(void)queryTVSwitchFunFun { NSMutableDictionary *paraDict = [NSMutableDictionary new]; [paraDict setValue:@"tv_switch_button" forKey:@"configKey"]; KWeakSelf [[netWorkManager shareInstance] CommonGetWithCallBackCode:querySwitchButton Parameters:paraDict success:^(id _Nonnull responseObject){ queryShareModel *queryShareMod = [[queryShareModel alloc] initWithDictionary:responseObject error:nil]; if(queryShareMod){ self->canInstallTVType = queryShareMod.data.configValue; weakSelf.curEditTypeBottomView.isCanInstallToTVType = self->canInstallTVType; } } failure:^(NSError * _Nonnull error) { }]; } @end